クリエイターの教科書

ChatGPT, Stable Diffusion, Visual Studio, Excelなど教科書

【Visual Studioの教科書】C#でAI ~ 顔認識や日本語解析のサンプル

ヴィジュアルスタジオのC#では、ライブラリが簡単に利用できるようになっています。

顔認識や言語の形態解析なども、結構簡単に試せます。

形態素解析

New Alphabet

言語を分析したり、機械学習させたりする場合、前処理として言語を分解する必要があります。

つまり、「私の名前はカルメンです」とあったら、「私」「の」「名前」「は」「カルメン」「です」と分けてから分析を行います。

 

このような処理(形態素解析)を行ってくれるのが、MeCabのライブラリです。

 

「参照の追加>NuGetパッケージの管理」を行い、「参照」タブから「MeCab」関連のものを探します。

「NMeCab」というのがあるのでインストールします。

f:id:apicode:20190906083310p:plain

 

ボタンを押したら解析結果を適すボトックスに表示するようフォームを作ります。

f:id:apicode:20190906083548p:plain

 

あとはプログラムでMeCabの利用ができるように宣言します。

using NMeCab;

 

プログラムでは「MeCabParam 」「MeCabTagger」「MeCabNode 」などを使って解析します。

分析する文章「sResource」と出力結果用テキスト「sResult」を使って以下のようにソースを書きます。

 

try
{

   string sSource = "私の名前はカルメンです。";
   string sResult = "";

   MeCabParam mcParam = new MeCabParam();
   mcParam.DicDir = @"..\..\..\packages\NMeCab.0.06.4\content\net45\dic\ipadic";

   MeCabTagger mcTagger = MeCabTagger.Create(mcParam);
   MeCabNode mcNode = mcTagger.ParseToNode(sSource);
   while (mcNode != null)
   {
      if (mcNode.CharType > 0)
      {
      sResult = sResult + mcNode.Surface + "\t" + mcNode.Feature + "\r\n";
      }
      mcNode = mcNode.Next;
   }
   textBox1.Text = sResult;
}
catch (Exception ex)
{
   MessageBox.Show(ex.Message);
}

 

辞書を指定する必要があり、今回はパッケージ内にある辞書のパス「@"..\..\..\packages\NMeCab.0.06.4\content\net45\dic\ipadic"」を指定しましたが、必要に応じて(例えばダウンロードした辞書を使う場合など)適宜変更してください。

 

これで実行すると、無事以下のように結果が表示されました。

f:id:apicode:20190906083839p:plain

 

参考:

NMeCabで形態素解析してみよう - Qiita

 

 

OpenCVで顔認識のサンプル

Facial Recognition

OpenCVで顔認識のサンプルは、こちらが丁寧で分かりやすいです。

C#とOpenCVSharpで画像処理!(Visual Studio 2019) | 千草ウェブ

 

うちで試したライブラリは「OpenCvSharp3-AnyCPU」で、NuGetを使ってインストールします。

f:id:apicode:20190912215057p:plain

 

C#からは、まずライブラリの利用をコードで宣言します。

 

using OpenCvSharp;
using OpenCvSharp.Extensions;

 

使う変数は以下のようなものです。

CascadeClassifier cascade;
VideoCapture capture = new VideoCapture();

Mat normalFrame = new Mat();

 

ビデオカメラの入力を取得します。

int cameraNum=0;//カメラの番号

capture.Open(cameraNum);

 

Matオブジェクトに読み込ませます。

capture.Read(normalFrame);

 

顔認識のデータファイルへのパスを指定します。

sPath= "haarcascade_frontalface_alt2.xml";

cascade = new CascadeClassifier(sPath);

 

あとは、rectを取得し、矩形を描くなどの処理を顔の回数分ループします。

foreach (Rect rectFace in cascade.DetectMultiScale(normalFrame))
{
  Rect rect = new Rect(rectFace.X, rectFace.Y, rectFace.Width, rectFace.Height);
  Cv2.Rectangle(normalFrame, rect, new OpenCvSharp.Scalar(255, 0, 255), 2);
}

 

顔認識ではOpenCVの「haarcascade_frontalface_default.xml」などをダウロードしておく必要があります。

精度はデータファイルによってかわってきます。

同じ顔用でも結構認識には違いが出るようで、いろいろ試してみるとよさそうです。

いかに試した実例が紹介されています。 

OpenCV 使用可能なCascadeClassifierの種類と効果 - Symfoware

 

このブログは、ネットや書籍上の情報、個人の体験や感想を中心にまとめたものです。 正確性を期していはいますが、間違い・誤訳等あるかもしれません。 当サイトの情報によって生じたいかなる損失について一切の責任を負わないものとします. あらかじめご了承ください。

プライバシーポリシー |〇利用規約 |〇問い合わせ