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

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

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

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

Q&A

0回答

994閲覧

DLLのYOLOの扱い方

hsgru3

総合スコア22

DLL

DLL(Dynamic Link Library)とは、他のモジュールからも使用する事が出来る、関数とデータが格納されているモジュールのことです。

YOLO

YOLOとは、画像検出および認識用ニューラルネットワークです。CベースのDarknetというフレームワークを用いて、画像や動画からオブジェクトを検出。リアルタイムでそれが何になるのかを認識し、分類することができます。

0グッド

0クリップ

投稿2019/05/08 02:27

前提・実現したいこと

darknetのYOLOv2の物体検出を利用してWebカメラから読み込んだ映像を作成した.cfgと.weightsでリアルタイムに花を矩形で囲むようなWindowsフォームアプリケーションを作成しています。
yolo_cpp_dll.slnをビルドしてyolo_cpp_dll.dllを作成し、yolo_console_dll.slnをビルド、yolo_console_dll.exeを実行するところまではできています。
まずは、yolo_console_dll.slnのようにyolo_cpp_dll.dllやyolo_v2_class.hppを使ってwebカメラの映像をリアルタイムで花を検出するようなコンソールアプリケーションを作ろうとしています。
コンソールアプリケーションのファイル構成でつまずいています。

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

まず、yolo_console_dll.slnと全く同じプログラムを作成しようと、visual studio 2015でファイル→新規作成→プロジェクトからwin32コンソールアプリケーションを空のプロジェクトとして作成しました。yolo_console_dll.cppの内容をコピーしてyolo_cpp_dll.lib、yolo_cpp_dll.dll、yolo_v2_class.hppをソースコードと同じところに配置してデバッグなしで開始をしましたが。以下のエラーコードが出てしまいます。

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. YOLOdll c:\users\aselab\documents\visual studio 2015\projects\yolodll\yolodll\yolo_v2_class.hpp 209 エラー C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. YOLOdll c:\users\aselab\documents\visual studio 2015\projects\yolodll\yolodll\yolo_v2_class.hpp 189 エラー C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. YOLOdll c:\users\aselab\documents\visual studio 2015\projects\yolodll\yolodll\yolo_v2_class.hpp 192 エラー C4996 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. YOLOdll c:\users\aselab\documents\visual studio 2015\projects\yolodll\yolodll\yolo_v2_class.hpp 200

サイトで調べた情報をもとに#define _CRT_SECURE_NO_WARNINGSとyolo_v2_class.hppに記述してデバッグなしで開始したところ以下のエラーが発生しました。

重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態 エラー LNK2019 未解決の外部シンボル "public: __cdecl Detector::Detector(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int)" (??0Detector@@QEAA@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0H@Z) が関数 main で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK2019 未解決の外部シンボル "public: __cdecl Detector::~Detector(void)" (??1Detector@@QEAA@XZ) が関数 main で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK2019 未解決の外部シンボル "public: class std::vector<struct bbox_t,class std::allocator<struct bbox_t> > __cdecl Detector::detect(struct image_t,float,bool)" (?detect@Detector@@QEAA?AV?$vector@Ubbox_t@@V?$allocator@Ubbox_t@@@std@@@std@@Uimage_t@@M_N@Z) が関数 "public: class std::vector<struct bbox_t,class std::allocator<struct bbox_t> > __cdecl Detector::detect_resized(struct image_t,int,int,float,bool)" (?detect_resized@Detector@@QEAA?AV?$vector@Ubbox_t@@V?$allocator@Ubbox_t@@@std@@@std@@Uimage_t@@HHM_N@Z) で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK2019 未解決の外部シンボル "public: static void __cdecl Detector::free_image(struct image_t)" (?free_image@Detector@@SAXUimage_t@@@Z) が関数 "public: void __cdecl <lambda_2e9fc37c78f127f2606664cac01bc482>::operator()(struct image_t *)const " (??R<lambda_2e9fc37c78f127f2606664cac01bc482>@@QEBAXPEAUimage_t@@@Z) で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK2019 未解決の外部シンボル "public: int __cdecl Detector::get_net_width(void)const " (?get_net_width@Detector@@QEBAHXZ) が関数 "public: class std::shared_ptr<struct image_t> __cdecl Detector::mat_to_image_resize(class cv::Mat)const " (?mat_to_image_resize@Detector@@QEBA?AV?$shared_ptr@Uimage_t@@@std@@VMat@cv@@@Z) で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK2019 未解決の外部シンボル "public: int __cdecl Detector::get_net_height(void)const " (?get_net_height@Detector@@QEBAHXZ) が関数 "public: class std::shared_ptr<struct image_t> __cdecl Detector::mat_to_image_resize(class cv::Mat)const " (?mat_to_image_resize@Detector@@QEBA?AV?$shared_ptr@Uimage_t@@@std@@VMat@cv@@@Z) で参照されました。 YOLOdll c:\Users\aselab\documents\visual studio 2015\Projects\YOLOdll\YOLOdll\main.obj 1 エラー LNK1120 6 件の未解決の外部参照 YOLOdll c:\users\aselab\documents\visual studio 2015\Projects\YOLOdll\x64\Debug\YOLOdll.exe 1

該当のソースコード

#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vector> #define OPENCV #include "yolo_v2_class.hpp" // imported functions from DLL #ifdef OPENCV #include <opencv2/opencv.hpp> // C++ //#pragma comment(lib, "opencv_core249.lib") //#pragma comment(lib, "opencv_imgproc249.lib") //#pragma comment(lib, "opencv_highgui249.lib") #pragma comment(lib, "opencv_world340.lib") void draw_boxes(cv::Mat mat_img, std::vector<bbox_t> result_vec) { for (auto &i : result_vec) { cv::rectangle(mat_img, cv::Rect(i.x, i.y, i.w, i.h), cv::Scalar(50, 200, 50), 3); } cv::imshow("window name", mat_img); cv::waitKey(0); } #endif // OPENCV void show_result(std::vector<bbox_t> result_vec) { for (auto &i : result_vec) { std::cout << "obj_id = " << i.obj_id << " - x = " << i.x << ", y = " << i.y << ", w = " << i.w << ", h = " << i.h << ", prob = " << i.prob << std::endl; } } int main() { Detector detector("yolo-voc.cfg", "yolo-voc.weights"); while (true) { std::string filename; std::cout << "input image filename: "; std::cin >> filename; if (filename.size() == 0) break; #ifdef OPENCV cv::Mat mat_img = cv::imread(filename); std::vector<bbox_t> result_vec = detector.detect(mat_img); draw_boxes(mat_img, result_vec); #else std::vector<bbox_t> result_vec = detector.detect(filename); #endif show_result(result_vec); } return 0; }

試したこと

未解決の外部シンボル~が関数~で参照されましたというエラーコードがあるのでなにかincludeできていなかったりするのかと考えているのですがわかりません。

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

Windows 10
opencv 3.4.0

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

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

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

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

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

yohhoy

2019/05/17 02:36

エラー「未解決の外部シンボル~が関数~で参照されました」は、コンパイル時ではなくリンク時のエラーです。つまりコンパイル時に処理されるinclude不足ではなく、リンク時に必要な依存ライブラリ(*.lib)指定が不足しているために生じるエラーです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問