質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4728閲覧

OpenCVを用いたGPU処理の際のプログラムエラー(Expected Ptr<cv::UMat> for argument)

ks130

総合スコア6

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/05/26 04:25

編集2021/05/26 04:28

前提・実現したいこと

顔認識して、モザイク処理をするアプリケーションを作っています。
現状CPUをつかって処理したいですが、GPUを使うことで高速化できないか検討しています。

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

以下の通り、何かしらの設定が必要な状況です。

face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
TypeError: Expected Ptrcv::UMat for argument 'image'

該当のソースコード

face_cascade_path = '/home/ubuntu/opencv/data/haarcascades_cuda/haarcascade_frontalface_alt2.xml' fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') writer = cv2.VideoWriter(after, fmt, frame_rate, size) ### Run with GPU img_gpu_src2 = cv2.cuda_GpuMat() img_gpu_dst2 = cv2.cuda_GpuMat() for i in range(frame_count): ret, frame = video.read() img_gpu_src2.upload(frame) gray = cv2.cuda.cvtColor(img_gpu_src2, cv2.COLOR_BGR2GRAY) face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30)) for (x, y, w, h) in face: ###モザイク処理 frame[y:y+h, x:x+w] = mosaic(frame[y:y+h, x:x+w], 0.01)   img_gpu_dst2 = frame frame = img_gpu_dst2.download() writer.write(frame) # モザイク処理 def mosaic(img, alpha): w = img.shape[1] h = img.shape[0] ### Run with GPU img_gpu_src = cv2.cuda_GpuMat() img_gpu_dst = cv2.cuda_GpuMat() # 最近傍法で縮小→拡大することでモザイク加工、GPU処理 img_gpu_src.upload(img) img_gpu_dst = cv2.cuda.resize(img_gpu_src, (int(w*alpha), int(h*alpha))) img_gpu_dst = cv2.cuda.resize(img_gpu_dst, (w, h), interpolation=cv2.INTER_NEAREST) img = img_gpu_dst.download() return img

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ks130

2021/05/26 10:31

参考情報ありがとうございます。 上記のパスに則りコード修正しました。 face_cascade_path = '/home/ubuntu/opencv/data/haarcascades_cuda/haarcascade_frontalface_alt2.xml' cascade = cv2.cuda_CascadeClassifier.create(face_cascade_path) # 保存用 fmt = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') writer = cv2.VideoWriter(after, fmt, frame_rate, size) img_gpu_src2 = cv2.cuda_GpuMat() img_gpu_dst2 = cv2.cuda_GpuMat() for i in range(frame_count): ret, frame = video.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray2 = cv2.cuda_GpuMat(gray) face = cascade.detectMultiScale(gray2) for (x, y, w, h) in face: frame[y:y+h, x:x+w] = mosaic(frame[y:y+h, x:x+w], 0.01) img_gpu_dst2 = face.download writer.write(img_gpu_dst2) 以下のエラーになります。設定が足りていないでしょうか? cascade = cv2.cuda_CascadeClassifier.create(face_cascade_path) cv2.error: OpenCV(4.2.0) /home/ubuntu/opencv/modules/core/include/opencv2/core/private.cuda.hpp:115: error: (-213:The function/feature is not implemented) The called functionality is disabled for current build or platform in function 'throw_no_cuda'
jbpb0

2021/05/26 10:55

> cv2.error: OpenCV(4.2.0) 私が紹介した一つ目のWebページに、「This is most likely due to the use of a version of openCV between 4.0.0 and 4.3.0, In those versions cuda_CascadeClassifier was disabled.」と書かれてます
ks130

2021/05/27 00:43

ありがとうございます。構築をし直して再検証します。
guest

回答1

0

ベストアンサー

投稿2021/05/28 11:43

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ks130

2021/05/30 23:53 編集

ありがとうございます。理解できました。
jbpb0

2021/05/31 01:05 編集

同様な問題を抱えていて検索でたどり着いた人はたいてい回答しか見ないので、同じ内容ですが回答にも書きました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問