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

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

新規登録して質問してみよう
ただいま回答率
85.45%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

Q&A

0回答

980閲覧

C# リアルタイムで顔認識

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

0グッド

0クリップ

投稿2022/09/08 01:21

編集2022/09/08 03:47

前提

Visual Studio2019でUSBカメラを使って、
リアルタイムで顔認識するソフトを作ろうと思いましたが、
カメラの画像を顔認識処理にどうやって渡すか分かりません。
ご教授のほどをお願い申し上げます

実現したいこと

リアルタイムでUSBカメラから1秒ごとに画像を受けて、
顔認識をかけて表示出来るようにしたいです。

ピクチャーボックス1で現在映っている画像を表示し、
ピクチャーボックス2で顔認識した画像を表示したいです

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

イメージ説明

// 判定画像ファイルをロードのところでエラーになっております。

エラーメッセージ
error CS1503: 引数 1: は 'OpenCvSharp.Mat' から 'string' へ変換することはできません

該当のソースコード

Form1.cs

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11using OpenCvSharp; 12using OpenCvSharp.Extensions; 13using System.IO; 14 15namespace Face 16{ 17 public partial class Form1 : Form 18 { 19 private Mat _flame; 20 public Form1() 21 { 22 InitializeComponent(); 23 } 24 25 private void Form1_Load(object sender, EventArgs e) 26 { 27 //PictureBoxのサイズに合わせて表示 28 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; 29 pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; 30 } 31 32 private void button1_Click(object sender, EventArgs e) 33 { 34 //VideoCapture作成 35 using (var capture = new VideoCapture()) 36 { 37 //カメラの起動  38 capture.Open(0); 39 40 if (!capture.IsOpened()) 41 { 42 throw new Exception("capture initialization failed"); 43 } 44 45 //画像取得用のMatを作成 46 _flame = new Mat(); 47 48 while (true) 49 { 50 try 51 { 52 capture.Read(_flame); 53 if (_flame.Empty()) 54 { 55 break; 56 } 57 58 if (_flame.Size().Width > 0) 59 { 60 //PictureBoxに表示 MatをBitMapに変換 61 pictureBox1.Image = BitmapConverter.ToBitmap(_flame); 62 } 63 64 int key = Cv2.WaitKey(); 65 66 if (this.IsDisposed) 67 { 68 break; 69 } 70 } 71 72 catch (Exception) 73 { 74 break; 75 } 76 } 77 } 78 } 79 80 private void button2_Click(object sender, EventArgs e) 81 { 82 var capture = _flame; 83 84 if (capture == null) 85 { 86 return; 87 } 88 89 pictureBox2.Image = BitmapConverter.ToBitmap(capture); 90 91 //タイマーをONにする 92 timer1.Enabled = true; 93 } 94 95 private void button3_Click(object sender, EventArgs e) 96 { 97 //タイマーをOFFにする 98 timer1.Enabled = false; 99 } 100 101 private void timer1_Tick(object sender, EventArgs e) 102 { 103 // 顔認識用カスケードファイルパス 104 string classifierFilePath = Application.StartupPath + "\\haarcascade_frontalface_alt2.xml"; 105 string classifierFilePath2 = Application.StartupPath + "\\haarcascade_frontalface_default.xml"; 106 if (!File.Exists(classifierFilePath)) 107 { 108 MessageBox.Show("顔認識用カスケードファイルがみつかりません"); 109 } 110 if (!File.Exists(classifierFilePath2)) 111 { 112 MessageBox.Show("顔認識用カスケードファイルがみつかりません"); 113 } 114 115 // 顔認識用カスケード分類器を作成 116 using (var haarCascade = new CascadeClassifier(classifierFilePath)) 117 using (var haarCascade2 = new CascadeClassifier(classifierFilePath2)) 118 119 // 判定画像ファイルをロード 120 using (var matSrcImage = new Mat(_flame, ImreadModes.Color))  // ←←←ここでエラー(_flame) 121 using (var matGrayscaleImage = new Mat()) 122 { 123 Mat matRetImage = matSrcImage.Clone(); 124 125 // 入力画像をグレースケール化 126 Cv2.CvtColor( 127 src: matSrcImage, 128 dst: matGrayscaleImage, 129 code: ColorConversionCodes.BGR2GRAY); 130 131 // 顔認識を実行 132 var faces = haarCascade.DetectMultiScale( 133 image: matGrayscaleImage, 134 scaleFactor: 1.1, 135 minNeighbors: 4, 136 minSize: new OpenCvSharp.Size(100, 100)); 137 138 var faces2 = haarCascade2.DetectMultiScale( 139 image: matGrayscaleImage, 140 scaleFactor: 1.1, 141 minNeighbors: 4, 142 minSize: new OpenCvSharp.Size(100, 100)); 143 144 // 認識した顔の周りを枠線で囲む 145 foreach (var face in faces) 146 { 147 Cv2.Rectangle( 148 img: matRetImage, 149 rect: new Rect(face.X, face.Y, face.Width, face.Height), 150 //color: new Scalar(0, 255, 255), 151 color: new Scalar(0, 0, 255), 152 thickness: 2); 153 } 154 foreach (var face in faces2) 155 { 156 Cv2.Rectangle( 157 img: matRetImage, 158 rect: new Rect(face.X, face.Y, face.Width, face.Height), 159 //color: new Scalar(0, 255, 255), 160 color: new Scalar(0, 0, 255), 161 thickness: 2); 162 } 163 164 pictureBox2.Image = BitmapConverter.ToBitmap(matRetImage); 165 166 } 167 } 168 } 169}

試したこと

色々ウェブサイトで解決策を探したが見つかりませんでした。
USBカメラは認識できています。

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

フレームワーク .NET Framework 4.7.2
全て最新にしてあります
イメージ説明

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/09/08 02:41 編集

投稿したら結果をレビューするぐらいのことはしましょう。コードの部分を見たら直す必要があるのはすぐわかるはず。他人に見てもらわないと話が始まらないのだから見てもらう努力をしてください。 それから、コードのどの行でエラーが出ているかを明示してください。例えばコードに「// <= ここでエラー」と書くとか。
退会済みユーザー

退会済みユーザー

2022/09/08 02:54

すみません、今日初めてサイトに投稿したのでマナーなどについてよく分かりませんでした。 投稿のアドバイスありがとうございます。直ぐに直します。 投稿したら結果をレビューするというのはどういう事でしょうか?
退会済みユーザー

退会済みユーザー

2022/09/08 03:06

> 投稿したら結果をレビューするというのはどういう事でしょうか? https://e-words.jp/w/%E3%83%AC%E3%83%93%E3%83%A5%E3%83%BC.html ”レビューとは、再検討(する)、再考(する)、復習(する)、論評(する)、講評(する)、検査(する)、精査(する)、点検(する)、査察(する)、審査(する)、回顧(する)などの意味を持つ英単語”
退会済みユーザー

退会済みユーザー

2022/09/08 03:31 編集

すみません、ご指導ありがとうございます。 投稿したら見直すようにします。
退会済みユーザー

退会済みユーザー

2022/09/08 06:00

> private Mat _flame; > ・・・中略・・・ > using (var matSrcImage = new Mat(_flame, ImreadModes.Color)) > 引数 1: は 'OpenCvSharp.Mat' から 'string' へ変換することはできません Mat クラスのコンストラクタは以下のドキュメントの通りで、上記のコードのような引数(Mat と ImreadModes)を取るコンストラクタのオーバーロードはありません。 Mat Class https://shimat.github.io/opencvsharp_docs/html/7b686c13-aaa7-5f3a-e2be-7da57895443f.htm コンパイラは Mat(String, ImreadModes) が指定されたのであろうと理解してそのエラーメッセージを出したようです。 どこかにあったコードをコピペして使っているのであろうと想像してますが、であれば、よく見比べてください。転記ミスとかしてませんか? 自分がアドバイスできるのはここまでです。 (誰かがコードをデバッグしてくれることを期待していたとすると、それはちょっと期待しすぎです。それはここ Teratail では非推奨ですし) (エラーメッセージの意味が分からなかったとすると、ごく基本的なことも分かってないということで、それも問題です。たぶん話が通じなくて、文章でやり取りするここのような Q&A サイトで質問して解決するのは無理がありますので)
退会済みユーザー

退会済みユーザー

2022/09/08 06:25

ご指摘ありがとうございます。 このコードは色んなサイトやOpenCVに関する本を見て自分なりに書いたものです。 エラーの意味は分かっていますが、 なんとかカメラからキャプチャーした画像をフォルダに保存せずにそのまま顔認識の処理に渡す方法を探しています。
退会済みユーザー

退会済みユーザー

2022/09/08 07:52

> エラーの意味は分かっていますが、 厳しいことを言うようですが、まず、コンパイルも通らないコードをこういう Q&A サイトに貼って質問するのはやめるべきです。しかも、上の 2022/09/08 15:00 の私のコメントに書いたことは分かっていたと言うのですよね。だったらなおさらです。お互いの時間と労力の無駄にしかなってなかったということですから。 > なんとかカメラからキャプチャーした画像をフォルダに保存せずにそのまま顔認識の処理に渡す方法を探しています。 それは最初の質問に書きましょう。情報の後出し小出しはこういうサイトでは最もやってはいけないことの一つです。 そして、もし、「画像をフォルダに保存」すれば「顔認識の処理」はできるところまで進んでいて、現状の課題がファイルを使わずメモリー上だけで処理することであれば、できたところまでのコードを提示して、そのための質問をしてもらう方がよさそうです。
YAmaGNZ

2022/09/08 07:58

new Mat(_flame, ImreadModes.Color)とMatを作成しようとしている元ネタの_flameがMatということが分かっていてnewしているということですかね?
退会済みユーザー

退会済みユーザー

2022/09/08 08:36

ご指摘ありがとうございます。 サイトの使い方を勉強せずに投稿してしまい申し訳ございませんでした。 勉強してから出直してきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.45%

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

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

質問する

関連した質問