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

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

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

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

Visual Studio

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

OpenCV

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

受付中

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

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Visual Studio

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

OpenCV

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

0回答

0リアクション

0クリップ

364閲覧

投稿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#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions; using System.IO; namespace Face { public partial class Form1 : Form { private Mat _flame; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //PictureBoxのサイズに合わせて表示 pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage; } private void button1_Click(object sender, EventArgs e) { //VideoCapture作成 using (var capture = new VideoCapture()) { //カメラの起動  capture.Open(0); if (!capture.IsOpened()) { throw new Exception("capture initialization failed"); } //画像取得用のMatを作成 _flame = new Mat(); while (true) { try { capture.Read(_flame); if (_flame.Empty()) { break; } if (_flame.Size().Width > 0) { //PictureBoxに表示 MatをBitMapに変換 pictureBox1.Image = BitmapConverter.ToBitmap(_flame); } int key = Cv2.WaitKey(); if (this.IsDisposed) { break; } } catch (Exception) { break; } } } } private void button2_Click(object sender, EventArgs e) { var capture = _flame; if (capture == null) { return; } pictureBox2.Image = BitmapConverter.ToBitmap(capture); //タイマーをONにする timer1.Enabled = true; } private void button3_Click(object sender, EventArgs e) { //タイマーをOFFにする timer1.Enabled = false; } private void timer1_Tick(object sender, EventArgs e) { // 顔認識用カスケードファイルパス string classifierFilePath = Application.StartupPath + "\\haarcascade_frontalface_alt2.xml"; string classifierFilePath2 = Application.StartupPath + "\\haarcascade_frontalface_default.xml"; if (!File.Exists(classifierFilePath)) { MessageBox.Show("顔認識用カスケードファイルがみつかりません"); } if (!File.Exists(classifierFilePath2)) { MessageBox.Show("顔認識用カスケードファイルがみつかりません"); } // 顔認識用カスケード分類器を作成 using (var haarCascade = new CascadeClassifier(classifierFilePath)) using (var haarCascade2 = new CascadeClassifier(classifierFilePath2)) // 判定画像ファイルをロード using (var matSrcImage = new Mat(_flame, ImreadModes.Color))  // ←←←ここでエラー(_flame) using (var matGrayscaleImage = new Mat()) { Mat matRetImage = matSrcImage.Clone(); // 入力画像をグレースケール化 Cv2.CvtColor( src: matSrcImage, dst: matGrayscaleImage, code: ColorConversionCodes.BGR2GRAY); // 顔認識を実行 var faces = haarCascade.DetectMultiScale( image: matGrayscaleImage, scaleFactor: 1.1, minNeighbors: 4, minSize: new OpenCvSharp.Size(100, 100)); var faces2 = haarCascade2.DetectMultiScale( image: matGrayscaleImage, scaleFactor: 1.1, minNeighbors: 4, minSize: new OpenCvSharp.Size(100, 100)); // 認識した顔の周りを枠線で囲む foreach (var face in faces) { Cv2.Rectangle( img: matRetImage, rect: new Rect(face.X, face.Y, face.Width, face.Height), //color: new Scalar(0, 255, 255), color: new Scalar(0, 0, 255), thickness: 2); } foreach (var face in faces2) { Cv2.Rectangle( img: matRetImage, rect: new Rect(face.X, face.Y, face.Width, face.Height), //color: new Scalar(0, 255, 255), color: new Scalar(0, 0, 255), thickness: 2); } pictureBox2.Image = BitmapConverter.ToBitmap(matRetImage); } } } }

試したこと

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

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

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

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

2022/09/22 14:39

こちらの質問が他のユーザーから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました。

SurferOnWww

2022/09/08 02:41 編集

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

退会済みユーザー

2022/09/08 02:54

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

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 編集

すみません、ご指導ありがとうございます。 投稿したら見直すようにします。
SurferOnWww

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に関する本を見て自分なりに書いたものです。 エラーの意味は分かっていますが、 なんとかカメラからキャプチャーした画像をフォルダに保存せずにそのまま顔認識の処理に渡す方法を探しています。
SurferOnWww

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

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

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C#

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

Visual Studio

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

OpenCV

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