C#顔の比較

C#顔の比較

テキスト認識と顔検出はすでに書きました。既製のホイール(Baidu SDKを直接呼び出す)を使用して、実際にはドキュメントをよく見て、それを書く方法を知っており、Baiduも複数の言語のコード例を提供しています。

最后更新 2022/01/20 14:12
Csharp小记
预计阅读 3 分钟
分类
.NET
标签
.NET C# 顔より。

前のページ

テキスト認識と顔検出はすでに書きました。既製のホイール(Baidu SDKを直接呼び出す)を使用して、実際にはドキュメントをよく見て、それを書く方法を知っており、Baiduはまた、複数の言語のコード例を提供しています。

したがって、後ろに特別なニーズがなければ、AI機能の一部を実装するためにBaidu APIを呼び出すコードはここで終了します。これら3つを書く理由は、これら3つのシナリオが日常生活や仕事で頻繁に使用されるためです。

顔比較機能は、一般的に顔と自分のIDカードを比較して検証する場合に使用されます。

機能の実現

  • 2つの顔が同一人物であることを確認する。

開発環境の整備

  • 開発ツール:Visual Studio 2013

  • NET Frameworkバージョン:4.5

コードの実装

//从官网下载AipSdk.dll引用到自己项目
//API文档地址:https://cloud.baidu.com/doc/FACE/s/Lk37c1tpf

//填写自己账号的api_key和secret_key
string api_key = "", secret_key = "";

 private void btnCompare_Click(object sender, EventArgs e)
{
    if (pictureBox1.Image == null || pictureBox2.Image == null)
    {
        MessageBox.Show("请先复制图片到图片框");
        return;
    }

    Baidu.Aip.Face.Face client = new Baidu.Aip.Face.Face(api_key, secret_key);
    List<byte[]> list = new List<byte[]>();
    list.Add(ImageToByte((Bitmap)pictureBox1.Image));
    list.Add(ImageToByte((Bitmap)pictureBox2.Image));
    JObject result = client.Match(list);
    if ((int)result["result_num"]==0)
    {
        textBox1.Text = "匹配失败";
    }
    else
    {
        JArray jarr = (JArray)result["result"];
        string score = jarr[0]["score"].ToString();
        textBox1.Text = "匹配度:" + score;
    }
}

//复制图片方法
private Image CopyImage()
{
    try
    {
        Image image = null;
        IDataObject iData = Clipboard.GetDataObject();
        if (iData.GetDataPresent(DataFormats.FileDrop))
        {
            object obj = iData.GetData(DataFormats.FileDrop);
            image = Image.FromFile((obj as string[])[0].ToString());
        }
        else if (iData.GetDataPresent(DataFormats.Bitmap))
        {
            object obj = iData.GetData(DataFormats.Bitmap);
            image = obj as Image;
        }
        return image;
    }
    catch { return null; }

}

//图片转byte[]
public byte[] ImageToByte(Bitmap inImg)
{
    MemoryStream mstream = new MemoryStream();
    inImg.Save(mstream, ImageFormat.Bmp);
    byte[] bytes = new Byte[mstream.Length];
    mstream.Position = 0;
    mstream.Read(bytes, 0, bytes.Length);
    mstream.Close();
    return bytes;
}

private void pictureBox1_Click(object sender, EventArgs e)
{
    //pictureBox1获得焦点
    pictureBox1.Focus();
}
private void pictureBox2_Click(object sender, EventArgs e)
{
     //pictureBox2获得焦点
    pictureBox2.Focus();
}
private void pictureBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    //粘贴图片到pictureBox1
    if (e.Control && e.KeyCode == Keys.V)
    {
        pictureBox1.Image = CopyImage();
    }
}
private void pictureBox2_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    //粘贴图片到pictureBox2
    if (e.Control && e.KeyCode == Keys.V)
    {
        pictureBox2.Image = CopyImage();
    }
}

効果の達成

Baiduによると、類似度が80以上であれば、一般的に同一人物とみなされます。

ドキュメントを見ると、公式にはV 2とV 3の2つのAPIがあるため、公式には私が書いたパラメータと矛盾することがわかるかもしれません。必要に応じて選択。

*** 簡単に使用してください **

*** 素晴らしいフォローアップ **

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同分类 / 同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读