状況説明
物体検出をしたいが、ダウンロードした物体検出モジュールのディレクトリ外にmain.pyを設置すると、importの部分でエラーが起きてしまう。
前提
pythonで物体検出(モデルはYOLOv7,v8)を行うシステムを作っています。
ファイル構造は以下です。
main.py |-YOLOv8 |-models |-utils detect.py |-YOLOv7 |-models |-utils detect.py
システム実行ファイルのmain.pyと同じ階層に、ダウンロードしたYOLOv7とYOLOv8のディレクトリを配置しています。YOLOのv7とv8を使い分けたいと考えているため、main.pyと同じ階層に置いています。
エラー部分
main.pyで動画を処理するのですが、main.pyでYOLOをimportし、画像を下位のディレクトリYOLOv8またはYOLOv7のdetect.pyに渡し、物体検出を行い、main.pyに画像を返したいと考えています。
しかし、detect.pyのファイル内で、さらにimport文(import models, utils)が書かれており、カレントディレクトリがmain.pyのある上位なので、models, utilsというディレクトリを確認できないとエラーが出ます。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "main.py", line 44, in <module> main() File "main.py", line 39, in main from yolov7 import detect as d File "/home/hoge/yolo_test/yolov7/detect.py", line 12, in <module> from models.experimental import attempt_load ModuleNotFoundError: No module named 'models'
pythonファイル
python:main.py
1from yolov7 import detect as d 2import cv2 3 4def main(): 5 v = cv2.VideoCapture("video/lab_0.mp4") 6 i=0 7 while true: 8 _, frame = v.read() 9 img = d.detect(frame) 10 cv2.imwrite(f"output/test_{i}.png", img) 11 i+=1
python:YOLOv7.detect.py
1import logging 2import torch 3import io 4import numpy as np 5from numpy import random 6import cv2 7import pandas as pd 8 9from models.experimental import attempt_load 10from utils.plots import Annotator, colors 11from utils import datasets 12from utils.torch_utils import select_device 13from utils.general import check_img_size, check_imshow, check_requirements, check_suffix, colorstr, is_ascii, \ 14 non_max_suppression, apply_classifier, scale_coords, xyxy2xywh, strip_optimizer, set_logging, increment_path, \ 15 save_one_box 16 17簡略化 18def detect(img): 19 img = detect(img) 20 return img
試したこと
物体検出を行うときだけカレントディレクトリを下位のYOLOv7に移動し、画像を処理したらカレントディレクトリをmain.pyの階層へ戻すようにos.chdir()コマンドを使いました。
しかし、エラー内容は同じでした。
希望
YOLOv7、YOLOv8は同じYOLOであるため、ディレクトリの中には同じ名前のファイルやディレクトリが多くあります。なのでYOLOv7、YOLOv8の中身は別々で、上位の階層でmain.pyを実行しようと考えています。
![guest](/img/icon/icnUserSample.jpg)
あなたの回答
tips
プレビュー