目次
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 インターフェイスは見苦しいですが、ファイルのアップロードと認識は正常に実行できます。
最後に、天の王の顔を検出します。