Giter Site home page Giter Site logo

e-gate's Introduction

E-gate

It will make using only prototype python

e-gate's People

Contributors

fukkyi avatar hoku113 avatar kazuki13 avatar ogawayujiro avatar

Forkers

kazuki13 hoku113

e-gate's Issues

1、データベースにユーザーを登録する

関数名と引数は以下の通り

関数: Register
引数: self, name(list型)

  1. ループでnameの要素を一つずつ取り出す

  2. INSERT文でDBにユーザーの名前を登録する
    ※この時 'flag'は0, 'enter', 'exit'の欄にはダミーの時間を入れる。

  3. 登録できたらsuccessと表示、エラーがあったらerrorと表示させる
    ※ try, exist文 または、assert文を使ってやるのが無難

できればデバックをしやすいように重要な変数に対してはlogging.info()で値を表示できるようにしてもらえると
助かります。

環境構築後

環境構築が終わったら全員このリポジトリをクローンまたはフォークしておいてください。

できた人は自分の名前の欄のチェックボックスにチェックしてください

@OgawaYujiro

  • 完了

@kazuki13

  • 完了

@ducmanh96

  • 完了

2, ユーザーを削除する機能

関数名、引数は以下の通り

関数名: DeleteUser
引数: self, ids (List型)

1, ids要素の数だけループを繰り返し、idを一つずつ取り出す

  1. DELETE文を使用して対象のidを削除する

こちらも同様にデバックをしやすいように重要な変数に対してlogging.info()で値を表示できるようにしてくれると助かります。

AIの精度を高めるために

照明条件などにかなり影響が受けやすく認識率が70%を超えることが一度もなかった。
やはりカメラの位置や画質もある程度いいものなければ厳しいときもある

一応解決の可能性としてはダイナミックレンジが搭載されているカメラを使ったり、顔の検出の部分をOpenVinoで実装してみたり、自分たちでオリジナルのAIを作ったりできれば解決できる可能性はある。

今後は上記3つの解決策を試してみるつもり

csvまたはxlsxによって処理を変える

送られてきたデータがcsv, xlsxかによって使用するモジュール、処理の仕方が変わるのでそれぞれ表記しておく

csvデータの場合

  1. pandasを使ってcsvデータを読み取る

  2. 名前の列のデータフレームを取り出す。

xlsxデータの場合

  1. xlsxファイルを読み込む

  2. シート名を指定する

  3. 名前の列がある場所を求める

  4. 求めた場所から下の列のデータを読み込んでリストとして保存する

スケジュールを決める

@ducmanh96 @OgawaYujiro @kazuki13

開発のスケジュールをまとめたので確認してください。

全体

  • #3, #5 6月15日までに完了
  • 7月20日までに全体テスト実施

camera.py

  • projectに書いたタスク一つにつき7~10日以内に作成すること
  • 7月10日までに単体テスト実施

face_recognition.py

  • タスク一つにつき5~7日以内に作成すること
  • 7月10日までに単体テスト実施

DB.py

  • 6月12日以降開発開始
  • 6月22日までにDBの作成
  • タスク一つにつき10~14日以内
  • 7月10日までに単体テスト実施

もし分かりにくいところなどがあれば遠慮なく聞いてください。

FaceAPIの機能をモジュールとして実装する

コードの可読性を考えて、FaceAPIの機能の部分はモジュールとして実装するようにする

関数名: FaceRecognition
引数: db_img, capture_img,
return: person_id

try:
# detect_req_face = faceclient.face.detect_with_stream(send_img, 'detection_03')
detect_req_face = faceclient.face.detect_with_stream(img, 'detection_03')
logging.info(len(detect_req_face))
face_req_id = detect_req_face[0].face_id
logging.info(face_req_id)
# それぞれの画像を比較して類似度を分析する
# 一番類似度が高かった番号を返す
person_id = 1
for x in db_img:
detect_face = faceclient.face.detect_with_url(x, "detection_03")
face_id = list(map(lambda x: x.face_id, detect_face))
logging.info(face_id)
similar_faces = faceclient.face.find_similar(face_id=face_req_id, face_ids=face_id)
if similar_faces:
verify_result = faceclient.face.verify_face_to_face(face_id1=face_req_id, face_id2=face_id[0])
logging.info("find similar_faces {} = {}. confidence: {}%".format('request_img.png', x, int(verify_result.confidence * 100)))
break
elif person_id < len(db_img):
person_id += 1
continue
else:
return func.HttpResponse(status_code=201)

プログラムの構成を決める

@ducmanh96 @OgawaYujiro @kazuki13

プログラムの構成に関してはすべてProjectsの中のtaskにファイルごとに表示しています
それを参照しながら機能を作っていってください。

また、各々の開発の状況を随時確認できるようにしたいので、現在取り組んでいる機能は「進行中」のところに必ず移動させるようにしてください

Webアプリとして実装するために

今回作ったプロトタイプのプログラムをWebアプリケーション内で実装できるようにするためにはどうすればいいのか話し合いを行いたい。
今のところ手っ取り早くできそうなのは今回作ったプログラムを全部API化してWebに組み込むことかな?

1, 新しいAzure functionsの関数を追加する

この前作った顔認識用の関数に加え、新たに2つの関数を追加する

  • register (ユーザーを新しく登録するための関数)
  • delete_user (ユーザーを削除するための関数)

3, delete_userの機能について

ユーザーを削除するための機能。 Azure functionで実装する

  1. フロントエンドから削除してほしいid, table名を受け取る

  2. データベースから削除するidの画像URLを取得する

  3. Blobにアクセスし、対象の画像を削除する

  4. データベースから対象の行を削除する

demo-verブランチについて

新しくdemo-verブランチを作成しました。

このブランチは7月のTECH Game show にて作成したデモを保存しておくためのブランチになります。

mainブランチはwebアプリケーションとして実装するためのapi,
demo-verブランチはローカル環境上で実装できるようにするためのプログラムです。

今後は、基本的に常に2つのブランチが存在している状態で開発をしていきます。
pull Requestするときは今まで通りmainに送るようにしてくれれば大丈夫です。

環境構築

開発環境をある程度揃えるために各自以下のソフトとモジュールを必ずインストールしてください。

環境構築が済んだものに関してはチェックボックスに随時チェックを入れていってください。

@OgawaYujiro

  • Visual Studio Code
  • Python 3.9
    • opencv-python
    • azure
    • azure-cognitive-services-vision-face
    • pymysql
    • Tkinter
    • Azure-storage-blob 12.0.0
  • Postman
  • git

@ducmanh96

  • Visual Studio Code
  • Python 3.9
    • opencv-python
    • azure
    • azure-cognitive-services-vision-face
    • pymysql
    • Tkinter
    • Azure-storage-blob 12.0.0
  • Postman
  • git

@kazuki13

  • Visual Studio Code
  • Python 3.9
    • opencv-python
    • azure
    • azure-cognitive-services-vision-face
    • pymysql
    • Tkinter
    • Azure-storage-blob 12.0.0
  • Postman
  • git

リアルタイムで分析できるようにするためにどうすればいいのか

今現在、顔を検出してから結果が返されるまで5~10秒ラグが発生している。これを3秒以内で処理できるようにしていきたい。
個人的にはエッジコンピューティングの技術はある程度必須になるとは思う。また、DB内での処理の仕方も変えられるようであれば変えておきたい。(人数が増えてきた場合処理に時間がかかる可能性が高いため)

リクエストを受け取る機能を追加する

21行目から下の行にhttp送信されたリクエストを受け取るプログラムを作る
構成は以下の通り

  • json形式のリクエストを取得する

  • リクエストにはDBのテーブル名をつける。

  • 送られてきたリクエストの検証を行う (リクエストされたデータがあるかどうか)

def main(req: func.HttpRequest) -> func.HttpResponse:
faceclient = FaceClient(ENDPOINT, CognitiveServicesCredentials(KEY))

2, register関数の機能

新しいユーザーを登録するためのAzure function機能は以下の通り

  1. フロントエンドからcsvまたはxlsxファイルと、画像データ、テーブル名を受け取る

  2. 上記のフォーマット以外のファイルが送られて来たらエラー文をレスポンスする

  3. #21

  4. 画像データの数と名前の数が一致していることを確認する

  5. 画像と名前の要素数が一致しなかったらエラー文をレスポンスする

  6. ループを使用して画像データを一つずつ取り出し、BLOBに保存する

  7. 上記のループの中で保存した画像のurlを順番に取得しimage_urlの中に格納する

  8. DBクラスにアクセスする

  9. Register関数にtable, name, image_urlを引数として渡す

このリポジトリの構成

このリポジトリではPythonのみを使用して顔認証を使った入退場システムのプロトタイプを作っていきます。

構成ファイルとその説明は以下の通りです。

  • camera.py: フロントエンド部分。カメラの起動やリクエストの送信を行います
  • face_recognition.py: AIの部分。リクエストされた画像を受け取って顔認証をするところ
  • DB.py: データベースの部分。データ更新の時や、テーブルにあるデータを取得するときに使う

※ DB.pyはface_recognitionフォルダーのshared_codeの中にある

データベースに登録されている人をすべて削除する機能を作成する

DeleteUserの関数の中に追記していってもらえればと思います。

この関数の中にfor文を使用して削除するidをひとつずつ取り出す部分があると思います。
その上の行に``if文を利用して、idsの要素の中に*の記号があるかどうか検証する文を追加してもらいたいです。

*の記号があったら、全ての人を削除する機能を実行
それ以外は削除するidをひとつずつ取り出して削除する

文だけで表しているので一部わかりづらいところがあると思います。
分からないところがあったら遠慮なく聞いてください。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.