RicardoM.Lu1 2023-04-07 10:15 采纳率: 80.6%
浏览 46
已结题

在写一个印章检测的测试代码时出现问题

在写一个印章检测代码的时候出现了问题


```python
import os
import base64
import torch.hub

root_path = os.getcwd()
yolo_model_path = root_path + '/yolov5/models/seal_detect_best.pt'


class Infer_main:
    def __init__(self, yolo_model_path):
        self.seal_infer = self.yolo_model_load()
        self.model_path = yolo_model_path

    def yolo_model_load(self):
        model = torch.hub.load('D:/workspace/seal/yolov5', 'custom', path=self.model_path, source='local',
                               force_reload=True)
        model.conf = 0.4
        model.eval()
        return model

    def predict(self, images):
        result = {'seal_page': []}
        seal_page = []
        for i in range(len(images)):
            yolo_res = self.seal_infer(images[i], size=640)
            yolo_res_list = yolo_res.pandas().xyxy[0].values.tolist()
            if yolo_res_list:
                for a in range(len(yolo_res_list)):
                    seal_page.append(str(i+1))
        print(type(result['seal_page']))
        result['seal_page'] = seal_page
        print(type(seal_page))

if __name__ == '__main__':
    pic = open("8.png", "rb")
    yolo_model_path='D:/workspace/seal/yolov5/models'
    a = Infer_main(yolo_model_path)
    a.predict(pic.read())

我在写下面的测试代码时出现了一些错误,报错信息如下:

```python
Traceback (most recent call last):
  File "D:\workspace\seal\seal_detection.py", line 37, in <module>
    a = Infer_main(yolo_model_path)
  File "D:\workspace\seal\seal_detection.py", line 11, in __init__
    self.seal_infer = self.yolo_model_load()
  File "D:\workspace\seal\seal_detection.py", line 15, in yolo_model_load
    model = torch.hub.load('D:/workspace/seal/yolov5', 'custom', path=self.model_path, source='local',
AttributeError: 'Infer_main' object has no attribute 'model_path'

我的最终目的是正确的把图片传递给AI能力检测是否有印章

  • 写回答

4条回答 默认 最新

  • 阳光宅男xxb 2023-04-07 10:27
    关注

    Infer_main中没有定义model_path属性,或者定义的不对,导致代码没有检测到。你要在init方法中把 self.model_path = yolo_model_path放在第一行,因为你先调用yolo_model_load方法的话,该方法中用到了model_path ,所以需要先调用 self.model_path = yolo_model_path,再调用 self.seal_infer = self.yolo_model_load(),这样yolo_model_load方法中才能检测到你定义的model_path :
    具体修改如下:

        def __init__(self, yolo_model_path):
            self.model_path = yolo_model_path
            self.seal_infer = self.yolo_model_load()
    
    

    如有帮助,点个采纳哦

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月7日
  • 已采纳回答 4月7日
  • 创建了问题 4月7日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同