OpenCVにおいて「HOG」で画像認識ができない

実現したいこと

OpenCVの「opencv_traincascade.exe」で生成した、「HOG特徴量」のXMLファイルで画像認識ができるようにしたい。

前提

「opencv_traincascade」で作ったファイルをPythonを使って、リアルタイムで画像認識をしています。

発生している問題・エラーメッセージ

cv2.error: OpenCV(4.7.0) D:\a\opencv-python\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp:1465: error: (-213:The function/feature is not implemented) HOG cascade is not supported in 3.0 in function 'cv::CascadeClassifierImpl::Data::read' The above exception was the direct cause of the following exception: Traceback (most recent call last): File "c:\Users\topaz\Desktop\プログラミング\tello\facecascade\mixed.py", line 7, in <module> cascade = cv2.CascadeClassifier("C:/Users/topaz/Desktop/cascade/cascade/clear/HOG20000_GAB_ok3.xml") SystemError: <class 'cv2.CascadeClassifier'> returned a result with an exception set

該当のソースコード

このコードを実行して「HOG」のXMLを作りました。

cmd

12opencv_traincascade.exe -data cascade -vec ok3/pos32.vec -bg ng/neglist.txt -numPos 20000 -numNeg 6600 -w 32 -h 32 -featureType HOG -precalcValBufSize 12000 -precalcIdxBufSize 12000 -bt GAB

これが画像認識のときのファイルです。

python

1import cv2 2import numpy 3 4# カメラの読込み5# 内蔵カメラがある場合、下記引数の数字を変更する必要あり6cap = cv2.VideoCapture(0)7cascade = cv2.CascadeClassifier("C:/Users/user/Desktop/cascade/cascade/clear/HOG20000.xml")8# 動画終了まで、1フレームずつ読み込んで表示する。9while(cap.isOpened()):10 # 1フレーム毎 読込み11 ret, frame = cap.read()12 img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)13 lists = cascade.detectMultiScale(img_gray, minSize=(100, 100))14 for (x,y,w,h) in lists:15 # いろいろな座標を定義16 window_width, window_height , channels = frame.shape 17 window_centerpoint = (int(window_height/2) ,int(window_width/2))18 object_centerpoint = (int(x+w/2),int(y+h/2))19 20 #映像に描画21 cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 0, 255), thickness=2)22 cv2.line(frame, window_centerpoint, object_centerpoint, (255, 255, 255), thickness=2, lineType=cv2.LINE_4)23 length_str = str(round(numpy.sqrt((window_centerpoint[0]-object_centerpoint[0])**2+(window_centerpoint[1]-object_centerpoint[1])**2)))+"px"24 cv2.putText(frame,length_str,(int((window_height/2)+((x+w/2)-(window_height/2))/2), int((window_width/2)+((y+h/2)-(window_width/2))/2)),cv2.FONT_HERSHEY_COMPLEX,0.8,(2,255,2),lineType=cv2.LINE_AA)25 # GUIに表示26 cv2.namedWindow("Camera", cv2.WINDOW_NORMAL)27 cv2.imshow("Camera", frame)28 # qキーが押されたら途中終了29 if cv2.waitKey(1) & 0xFF == ord('q'):30 break31 32# 終了処理33cap.release()34cv2.destroyAllWindows()

「HAAR」と「LBP」も試しましたが、問題なく実行できました。

試したこと

過去のTeratailにも同じような質問がありましたが、回答がついていなかったので質問させていただきました。
「HAAR」と「LBP」も試しましたが、問題なく実行できました。

なにかご存じでしたらおしえてください。

HOGでも実行できるようにしたいです。
解決よろしくおねがいします

補足情報(FW/ツールのバージョンなど)

opencv4.7.0
python3.10.10

コメントを投稿

0 コメント