顔認識オープン ソース プロジェクト --insightface

目次

1 インサイトフェイスの紹介

2 インサイトフェイスをインストール

3 使用insightface

4 Flask フレームワークの結合


1 インサイトフェイスの紹介

最近、顔認識などの機械学習プロジェクトが非常に人気がありますが、オープンソースの顔認識プロジェクトである Insightface を偶然発見しました。

顔認識技術は、画像内の顔と身元を正確に識別することができ、金融シナリオでの顔支払い、セキュリティ シナリオでの犯罪者の識別、医療シナリオでの新しいクラウン疫学調査など、豊富なアプリケーション シナリオを備えています。顔認証のアルゴリズム進化は、PCAに代表される初期段階を経て、「人工特徴量+分類器」による統計的学習手法の段階を経て、近年、ビッグデータやGPUの演算能力の爆発により、人間は顔認証は、深層学習アルゴリズムが絶対主役の段階に入っています。

InsightFace は、MXNet フレームワークに基づく業界の主流の顔認識ソリューションです。MXNet 実装と比較すると、OneFlow ベースの実装はパフォーマンスの点でさらに優れています. OneFlow は、データ並列処理で 2.82 倍高速、モデル並列処理で 2.45 倍高速、ハイブリッド並列処理で 1.38 倍高速 + 部分 FC 時間です。OneFlow に基づいて実装されたコードは、 データセット作成チュートリアル、トレーニングおよび検証スクリプト、事前トレーニング済みモデル、および MXNet モデルの変換ツールを含む、 insightface の公式リポジトリにマージされました。

2 インサイトフェイスをインストール

Insightface のインストールは非常に簡単です。次のコードを実行するだけです。

pip3 install -U insightface

インストールプロセス中に、他の依存関係をインストールする必要がある場合があります。プロンプトに従ってインストールしてください。

3 使用insightface

Insightface をインストールしたら、新しい test.py を作成し、次のコードを追加できます。

import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image

app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
img = ins_get_image('t1')
faces = app.get(img)
rimg = app.draw_on(img, faces)
cv2.imwrite("./t1_output.jpg", rimg)

実行後、結果が得られます。

かっこよくないですか~~

4 Flask フレームワークの結合

新しい server.py を作成します

import flask, os, sys, time
from flask import Flask, render_template, request, make_response
import func
 
app = Flask(__name__)

interface_path = os.path.dirname(__file__)
sys.path.insert(0, interface_path)

@app.route('/', methods=['get'])
def index():
    return render_template('index.html')

@app.route('/upload', methods=['post'])
def upload():
    fname = request.files['img']
    print("@@@@@@@@@@@@@@@@@@@@@@")
    print(fname.filename)
    newName = r'static/upload/' + fname.filename
    fname.save(newName)
    func.getRet(newName)
    #image_data = open("ldh_output.jpg", "rb").read()
    #response = make_response(image_data)
    #response.headers['Content-Type'] = 'image/jpg'
    #return response

    return render_template('result.html')
 
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug='True')

新しい func.py

import cv2
import numpy as np
import insightface
from insightface.app import FaceAnalysis
from insightface.data import get_image as ins_get_image

app = FaceAnalysis(providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
app.prepare(ctx_id=0, det_size=(640, 640))
#img = ins_get_image('t1')

def getRet(filename):
    img = cv2.imdecode(np.fromfile(filename, dtype=np.uint8), -1)
    faces = app.get(img)
    rimg = app.draw_on(img, faces)
    cv2.imwrite("./static/ldh_output.jpg", rimg)

 新しい index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>人脸识别</title>
</head>

<img src="{
   
   { url_for('static', filename='title.webp') }}" width="500" height=auto>

<form action="upload" method="post" enctype="multipart/form-data">
    <body class="light-theme">
        <p>识别人脸</p>
        <input type="file" id="img" name="img">
        <button type="submit">检测</button>

        
    </body>
</form>

</html>

新しい結果.html

<html>
    <body>
        <img src="{
   
   { url_for('static', filename='ldh_output.jpg') }}" width="500" height=auto>
    </body>
</html>

 新しい main.css

:root {
    --green: #00FF00;
    --white: #FFFFFF;
    --black: #000000;
  }

body {
    background: var(--bg);
    color: var(--fontColor);
    font-family: helvetica;
}

.light-theme {
    --bg: var(--green);
    --fontColor: var(--black);
}

server.py を実行し、127.0.0.0:5000 にアクセスします。

Web インターフェイスは見苦しいですが、ファイルのアップロードと認識は正常に実行できます。

最後に、天の王の顔を検出します。

 

×

おすすめ

転載: blog.csdn.net/daida2008/article/details/124916062