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

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

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

dlibは、機械学習のC++の画像処理ライブラリの一つ。性能の高い顔の器官検出が簡単にでき、Pythonバインドもあります。オープンソースで無料で使用でき、機械学習以外の様々な機能も搭載されています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

0回答

1076閲覧

マウスの座標表示と顔認識を同時に行いたい

Spi_muto

総合スコア75

dlib

dlibは、機械学習のC++の画像処理ライブラリの一つ。性能の高い顔の器官検出が簡単にでき、Pythonバインドもあります。オープンソースで無料で使用でき、機械学習以外の様々な機能も搭載されています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/08/20 09:26

前提・実現したいこと

USBカメラで取得した映像をウィンドウ出力し、そこから顔検出をしてマウスで検出した顔を指定したい。

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

カメラウィンドウ内でマウスを動かすと、カメラの映像が止まってしまう。

該当のソースコード

c++

1//カメラに写っている顔をdlibで識別 2//複数の顔のマーキング 3//数フレームおきに顔検出を実行することで高速化 4 5//マウスの座標取得 6 7 8#include <opencv2/opencv.hpp> 9#include <opencv2/highgui/highgui.hpp> 10#include <dlib/opencv.h> 11#include <dlib/image_io.h> 12#include <dlib/image_transforms.h> 13#include <dlib/image_processing/frontal_face_detector.h> 14#include <dlib/image_processing/render_face_detections.h> 15#include <dlib/image_processing.h> 16#include <dlib/gui_widgets.h> 17#include <omp.h> 18 19using namespace dlib; 20using namespace std; 21using namespace cv; 22 23#define DETECTION_PROCESS (20) //何フレームおきに顔検出をするか(90フレーム=1秒) 24 25 26//コールバック関数 27void mouse_callback(int event, int x, int y, int flags, void *userdata) 28{ 29 if (event == EVENT_LBUTTONDOWN) { 30 31 x = x - 320; 32 y = y - 240; 33 34 system("clear"); 35 36 //マウスの座標出力 37 cout << "(x, y) = " << "(" << x << ", " << y << ")" << endl; 38 cout << "方位角: " << acos(sqrt(x * x + 1)) / M_PI * 62.2 << "°" << endl; 39 cout << "仰角:  " << acos(sqrt(y * y + 1)) / M_PI * 48.8 << "°" << endl; 40 //cout << endl << "z: ズームイン" << endl << "x: ズームアウト" << endl; 41 cout << endl << "s: スクリーンショット" << endl; 42 cout << "q: 終了" << endl; 43 44 } 45} 46 47 48int main() 49{ 50 try 51 { 52 cv::Mat frame; 53 54 int frame_count = 0; 55 56 57 cv::VideoCapture cap(0); 58 if (!cap.isOpened()) 59 { 60 cerr << "Unable to connect to camera" << endl; 61 62 return 1; 63 } 64 65 66 frontal_face_detector detector = get_frontal_face_detector(); //顔検出機を呼び出す 67 //shape_predictor pose_model; 68 //deserialize("shape_predictor_68_face_landmarks.dat") >> pose_model; 69 70 while(cap.read(frame)) 71 { 72 73 if (frame_count == 0) { 74 75 cv_image<bgr_pixel> cimg(frame); 76 std::vector<dlib::rectangle> faces = detector(cimg); //顔検出 77 78 79 //顔を検出した場合 80 if (faces.size() > 0) { 81 #pragma omp parallel for 82 for (int i = 0; i < faces.size(); i++) { 83 cv::rectangle(frame, cv::Point(faces[i].left(), faces[i].top()), cv::Point(faces[i].right() + 1, faces[i].bottom() + 1), cv::Scalar(0, 0, 255), 3); 84 } 85 } 86 } 87 88 else { 89 90 frame_count++; 91 92 if (frame_count > DETECTION_PROCESS) { 93 frame_count = 0; 94 } 95 } 96 97 98 99 imshow("camera", frame); 100 101 102 103 const int key = cv::waitKey(1); 104 105 setMouseCallback("camera", mouse_callback); 106 107 // //zでズームイン 108 // if (key == 'z') { 109 // zoom += zoomRate; 110 // } 111 // //xでズームアウト 112 // else if (key == 'x') { 113 // zoom -= zoomRate; 114 // if(zoom < 1) zoom = 1; 115 // } 116 //sボタンでスクリーンショット 117 if (key == 's') { 118 std::string name; 119 120 std::cout << "file name?" << endl; 121 std::getline(std::cin, name); 122 123 cv::imwrite(name, frame); 124 } 125 //qボタンが押されたとき 126 else if(key == 'q') { 127 break; 128 } 129 130 } //while(cap.read(frame)) END 131 132 } 133 catch(serialization_error& e) 134 { 135 cout << "You need dlib's default face landmarking model file to run this example." << endl; 136 cout << "You can get it from the following URL: " << endl; 137 cout << " http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2" << endl; 138 cout << endl << e.what() << endl; 139 } 140 catch(exception& e) 141 { 142 cout << e.what() << endl; 143 } 144} 145

試したこと

コールバック関数内のcoutを減らしたがマウス座標の取得速度は速くなったがカメラ映像は止まったままだった。

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

顔認識はdibで行っています。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問