他人があなたのコンピュータに触れることをもう恐れる必要はありません! Pythonによるリアルタイム監視

他人があなたのコンピュータに触れることをもう恐れる必要はありません! Pythonによるリアルタイム監視

序文

最近、突然素晴らしいアイデアが浮かびました。コンピューターの画面に顔を向けると、コンピューターはまず画面上の顔が自分の顔かどうかを識別します。自分の顔だと認識された場合、コンピューターが言ったコードワードに答える必要があります。答えが正しければロックが解除され、チャンスは3回あります。正しく回答しないと、誰かが私のコンピューターを操作していることを知らせるメールが送信され、その人のプロフィール写真がアップロードされます。

プロセス

環境はwin10コードです。python3を使用しているため、開始する前にいくつかの依存パッケージをインストールする必要があります。順番にインストールしてください。そうしないとエラーが発生します。

  1. pip インストール cmake -i https://pypi.tuna.tsinghua.edu.cn/simple  
  2. pip で dlib をインストール -i https://pypi.tuna.tsinghua.edu.cn/simple  
  3. フェイス認識をpipでインストール -i https://pypi.tuna.tsinghua.edu.cn/simple  
  4. pip で opencv-python をインストール -i https://pypi.tuna.tsinghua.edu.cn/simple

次は、顔を認識して比較するためのコードを構築する。

  1. 顔認識をインポートする 
  2. cv2をインポート 
  3. numpyをnpとしてインポートする 
  4. ビデオキャプチャ= cv2.VideoCapture (0)  
  5. my_image =顔認識.load_image_file("my.jpg")  
  6. my_face_encoding = face_recognition.face_encodings (私の画像)[0]  
  7. 既知の顔エンコーディング= [  
  8. 私の顔のエンコーディング 
  9. ]  
  10. 知られている顔の名前= [  
  11. 「管理者」  
  12. ]  
  13. 顔の名前= []  
  14. 顔の位置= []  
  15. フェイスエンコーディング= []  
  16. process_this_frame = True    
  17. 真の場合:  
  18. ret、フレーム= video_capture .read()  
  19. 小さいフレーム= cv2.resize (フレーム、(0, 0)、 fx = 0.25 fy = 0.25 )  
  20. rgb_small_frame = 小さいフレーム[:, :, ::-1]  
  21. process_this_frameの場合:  
  22. 顔の位置=顔認識.顔の位置(rgb_small_frame)  
  23. face_encodings = face_recognition.face_encodings (rgb_small_frame、face_locations) です。  
  24. 顔の名前= []  
  25. face_encodings の face_encoding の場合:  
  26. 一致= face_recognition.compare_faces (known_face_encodings、face_encoding)  
  27. 名前= "不明"    
  28. 顔距離=顔認識.顔距離(既知の顔エンコーディング、顔エンコーディング)  
  29. best_match_index = np.argmin (面の距離)  
  30. [best_match_index]と一致する場合:  
  31. name =既知の顔の名前[ベストマッチインデックス]  
  32. face_names.append(名前)  
  33. process_this_frame =ではないprocess_this_frame  
  34. (上、右、下、左)、zip 内の名前(face_locations、face_names):  
  35. トップ *= 4  
  36. 左 *= 4  
  37. 右 *= 4  
  38. 下 *= 4  
  39. フォント= cv2.FONT_HERSHEY_DUPLEX  
  40. cv2.rectangle(フレーム、(左、上)、(右、下)、(0、0、255)、2)  
  41. cv2.rectangle(フレーム、(左、下 - 35)、(右、下)、(0、0、255)、cv2.FILLED)  
  42. cv2.putText(フレーム、名前、(左 + 6、下 - 6)、フォント、1.0、(255、255、255)、1)  
  43. cv2.imshow('ビデオ', フレーム)  
  44. cv2.waitKey(1) & 0xFF == ord('q')の場合:  
  45. 壊す 
  46. ビデオキャプチャーのリリース()  
  47. cv2.すべてのウィンドウを破棄する()

写真を撮って、my.jpg をアップロードする必要があります。実行すると、顔に管理者フレームが表示されます。インターネットで次のような写真を見つけました。

認識機能が完成しました。次のステップは音声認識と音声合成です。これにはBaidu AIを使用する必要があります。Baidu AIの公式サイトにログインし、コンソールの左側にある音声テクノロジーを選択します。次に、パネルの[アプリケーションの作成]ボタンをクリックして、[アプリケーションの作成]インターフェイスに入ります。

顔認証ロック解除ツールのコンピューター版を作成する

作成後、AppID、API キー、シークレット キーが取得されます。これらを書き留めてから、音声合成コードの作成を開始します。 Baidu AIが提供する依存パッケージをインストールする

  1. baidu-aip を pip でインストール -i https://pypi.tuna.tsinghua.edu.cn/simple  
  2. プレイサウンドをpipでインストール -i https://pypi.tuna.tsinghua.edu.cn/simple

次に簡単な音声再生コードがあります。以下のコードを実行すると可愛い女の子の声が聞こえます。

  1. インポートシステム 
  2. aipからAipSpeechをインポート 
  3. playsoundからplaysoundをインポート
  4. アプリケーションID = ''    
  5. API_KEY = ''    
  6. シークレットキー= ''    
  7. クライアント= AipSpeech (APP_ID、API_KEY、SECRET_KEY)  
  8. 結果=クライアント.synthesis('Hello', 'zh', 1, {'vol': 5, 'per': 4, 'spd': 5, })  
  9. isinstance(result, dict)でない場合:  
  10. ファイルとして open('auido.mp3', 'wb') を実行:  
  11. file.write(結果)  
  12. ファイルパス= eval (repr(sys.path[0]).replace('\\', '/')) + '//auido.mp3'  
  13. playsound(ファイルパス)

上記のコードでは、コンピューターの前にいるかどうかの検出(顔認識)と、コンピューターによる秘密コードの読み取り(音声合成)が完了しました。次に、コンピューターに秘密コードを答える必要があるため、音声認識も完了する必要があります。

  1. 輸入波 
  2. pyaudioをインポートする 
  3. aipからAipSpeechをインポート 
  4. アプリケーションID = ''    
  5. API_KEY = ''    
  6. シークレットキー= ''    
  7. クライアント= AipSpeech (APP_ID、API_KEY、SECRET_KEY)  
  8. チャンク= 1024    
  9. フォーマット= pyaudio.paInt16  
  10. チャンネル= 1    
  11. レート= 8000    
  12. 記録秒数= 3    
  13. WAVE_OUTPUT_FILENAME = "output.wav"    
  14. p = pyaudio.PyAudio ()関数 
  15. ストリーム= p .open(フォーマット= FORMAT チャンネル= CHANNELS レート= RATE 入力= True frames_per_buffer = CHUNK )  
  16. print("* 記録")  
  17. フレーム= []  
  18. i が範囲(0, int(RATE / CHUNK * RECORD_SECONDS))内である場合:  
  19. データ=ストリーム.read(CHUNK)  
  20. フレーム.append(データ)
  21. print("* 記録完了")  
  22. ストリームを停止します。  
  23. ストリームを閉じる()  
  24. p.終了()  
  25. wf = wave .open(WAVE_OUTPUT_FILENAME, 'wb')  
  26. wf.setnchannels(チャンネル)  
  27. wf.setsampwidth(p.get_sample_size(FORMAT))  
  28. wf.setframerate(レート)  
  29. wf.writeframes(b''.join(フレーム))  
  30. get_file_content() を定義します:  
  31. open(WAVE_OUTPUT_FILENAME, 'rb') を fp として実行します:  
  32. fp.read() を返す 
  33. 結果=クライアント.asr(get_file_content(), 'wav', 8000, {'dev_pid': 1537, })  
  34. 印刷(結果)

このコードを実行する前に、pyaudio 依存パッケージをインストールする必要があります。Windows 10 システムではインストール中にエラーが発生するため、次のようにインストールできます。このリンク https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio にアクセスして、対応するインストール パッケージをダウンロードし、インストールします。

顔認証ロック解除ツールのコンピューター版を作成する

走った後、挨拶をすると認識されたのが分かりました。これで小さなモジュール機能はすべて準備が整いました。次のステップは、それらをどのように統合するかです。顔認識コードでは、matches[best_match_index]を使用して、その人がコンピューターの所有者であるかどうかを判断していることがわかります。そのため、この判断ステートメントをメイン関数のエントリと見なします。

  1. [best_match_index]と一致する場合:  
  2. # 認識後の関数をここに記述します 
  3. name =既知の顔の名前[ベストマッチインデックス]

認識後、コンピューターにクエリ コード (音声合成コード) を送信させます。次に、それを関数にカプセル化し、顔認識コードを再構築します。

  1. cv2をインポート 
  2. インポート時間 
  3. numpyをnpとしてインポートする 
  4. 顔認識をインポートする 
  5. ビデオキャプチャ= cv2.VideoCapture (0)  
  6. my_image =顔認識.load_image_file("my.jpg")  
  7. my_face_encoding = face_recognition.face_encodings (私の画像)[0]  
  8. 既知の顔エンコーディング= [  
  9. 私の顔のエンコーディング 
  10. ]  
  11. 知られている顔の名前= [  
  12. 「管理者」  
  13. ]  
  14. 顔の名前= []  
  15. 顔の位置= []  
  16. フェイスエンコーディング= []  
  17. process_this_frame = True    
  18. def 話す(コンテンツ):  
  19. インポートシステム 
  20. aipからAipSpeechをインポート 
  21. playsoundからplaysoundをインポート 
  22. アプリケーションID = ''    
  23. API_KEY = ''    
  24. シークレットキー= ''    
  25. クライアント= AipSpeech (APP_ID、API_KEY、SECRET_KEY)  
  26. 結果=クライアント.synthesis(content, 'zh', 1, {'vol': 5, 'per': 0, 'spd': 5, })  
  27. isinstance(result, dict)でない場合:  
  28. ファイルとして open('auido.mp3', 'wb') を実行:  
  29. file.write(結果)  
  30. ファイルパス= eval (repr(sys.path[0]).replace('\\', '/')) + '//auido.mp3'  
  31. playsound(ファイルパス)  
  32. 試す:  
  33. 真の場合:  
  34. ret、フレーム= video_capture .read()  
  35. 小さいフレーム= cv2.resize (フレーム、(0, 0)、 fx = 0.25 fy = 0.25 )  
  36. rgb_small_frame = 小さいフレーム[:, :, ::-1]  
  37. process_this_frameの場合:  
  38. 顔の位置=顔認識.顔の位置(rgb_small_frame)  
  39. face_encodings = face_recognition.face_encodings (rgb_small_frame、face_locations) です。  
  40. 顔の名前= []  
  41. face_encodings の face_encoding の場合:  
  42. 一致= face_recognition.compare_faces (known_face_encodings、face_encoding)  
  43. 名前= "不明"    
  44. 顔距離=顔認識.顔距離(既知の顔エンコーディング、顔エンコーディング)  
  45. best_match_index = np.argmin (面の距離)  
  46. [best_match_index]と一致する場合:  
  47. 話す("あなたの顔を認識したので、コードを尋ね始めました。次に尋ねる質問に答えてください")  
  48. 時間.睡眠(1)  
  49. 話す("天王盖地虎")  
  50. エラー= 1 / 0  
  51. name =既知の顔の名前[ベストマッチインデックス]  
  52. face_names.append(名前)  
  53. process_this_frame =ではないprocess_this_frame  
  54. (上、右、下、左)、zip 内の名前(face_locations、face_names):  
  55. トップ *= 4  
  56. 左 *= 4  
  57. 右 *= 4  
  58. 下 *= 4
  59. フォント= cv2.FONT_HERSHEY_DUPLEX  
  60. cv2.rectangle(フレーム、(左、上)、(右、下)、(0、0、255)、2)  
  61. cv2.rectangle(フレーム、(左、下 - 35)、(右、下)、(0、0、255)、cv2.FILLED)  
  62. cv2.putText(フレーム、名前、(左 + 6、下 - 6)、フォント、1.0、(255、255、255)、1)  
  63. cv2.imshow('ビデオ', フレーム)  
  64. cv2.waitKey(1) & 0xFF == ord('q')の場合:  
  65. 壊す 
  66. except 例外を e として:  
  67. 印刷する 
  68. ついに:  
  69. ビデオキャプチャーのリリース()  
  70. cv2.すべてのウィンドウを破棄する()

ここで注意すべきことが1つあります。playsoundは音楽を再生するときに常にこのリソースを占有するため、次の音楽を再生するときにエラーが報告されます。解決策は、~\Python37\Lib\site-packagesのplaysound.pyファイルを変更し、次のコードを見つけることです。

顔認証ロック解除ツールのコンピューター版を作成する

sleep 関数の下にコード winCommand('close', alias) を追加して保存します。走った後、両方の文章を普通に話せることが分かりました。したがって、それを言った後は、それを監視する必要があり、関数をパッケージ化する必要もあります。

  1. レコード()を定義します:  
  2. 輸入波 
  3. jsonをインポート 
  4. pyaudio をインポートする 
  5. aipからAipSpeechをインポート 
  6. アプリケーションID = ''    
  7. API_KEY = ''    
  8. シークレットキー= ''    
  9. クライアント= AipSpeech (APP_ID、API_KEY、SECRET_KEY)  
  10. チャンク= 1024    
  11. フォーマット= pyaudio.paInt16  
  12. チャンネル= 1    
  13. レート= 8000    
  14. 記録秒数= 3    
  15. WAVE_OUTPUT_FILENAME = "output.wav"    
  16. p = pyaudio.PyAudio ()関数 
  17. ストリーム= p .open(フォーマット= FORMAT チャンネル= CHANNELS レート= RATE 入力= True frames_per_buffer = CHUNK )  
  18. print("* 記録")  
  19. フレーム= []  
  20. i が範囲(0, int(RATE / CHUNK * RECORD_SECONDS))内である場合:  
  21. データ=ストリーム.read(CHUNK)  
  22. フレーム.append(データ)  
  23. print("* 記録完了")  
  24. ストリーム.stop_stream()  
  25. ストリームを閉じる()  
  26. p.終了()  
  27. wf = wave .open(WAVE_OUTPUT_FILENAME, 'wb')  
  28. wf.setnchannels(チャンネル)  
  29. wf.setsampwidth(p.get_sample_size(FORMAT))  
  30. wf.setframerate(レート)  
  31. wf.writeframes(b''.join(フレーム))  
  32. get_file_content() を定義します:  
  33. open(WAVE_OUTPUT_FILENAME, 'rb') を fp として実行します:  
  34. fp.read() を返す 
  35. 結果=クライアント.asr(get_file_content(), 'wav', 8000, {'dev_pid': 1537, })  
  36. 結果= json .loads(str(result).replace("'", '"'))  
  37. 結果を返す["結果"][0]

顔認識後のコードを次のように変更します

  1. [best_match_index]と一致する場合:  
  2. 話す("あなたの顔を認識したので、コードを尋ね始めました。次に尋ねる質問に答えてください")  
  3. 時間.睡眠(1)  
  4. 話す("天王盖地虎")  
  5. フラグ= False  
  6.   範囲(0, 3)内の時間の場合:  
  7. コンテンツ=レコード()  
  8. コンテンツに「キノコ入りチキンシチュー」が含まれている場合:  
  9. 話す("コードが通過しました")  
  10. フラグ= True    
  11. 壊す 
  12. それ以外:  
  13. 話す("コードが失敗しました。もう一度お試しください")  
  14. フラグの場合:  
  15. print("ロック解除")  
  16. それ以外:  
  17. print("メールを送信し、悪者の顔写真をアップロードしてください!")  
  18. エラー= 1 / 0  
  19. name =既知の顔の名前[ベストマッチインデックス]

プログラムを実行して結果を確認します。コンピューターに「キノコ入りチキンシチュー」と答えると、コンピューターは「合格」というコードを返します。この機能は基本的に完成しています。

顔認証ロック解除ツールのコンピューター版を作成する

結論

メールの送信やロック画面の解除などの機能については、一つ一つ実装するつもりはありません。皆さんにとって難しいことではないと思います。ロック画面機能は、キーボードの時間をフックして無効にし、ウィンドウを使用してデスクトップ全体を覆うことができます。オンライン記事をメールボックスに送信する機能はたくさんあります。

<<:  製薬業界を覆すAIは「仕掛け」か「希望」か?

>>:  AI インフラストラクチャ スタックをわかりやすく解説し、AI プロジェクトをより迅速に展開

推薦する

ビッグデータは経済生活に影響を与え、AIの基礎となる

[[204536]] AIと企業にとってビッグデータの重要性とは何でしょうか?ビッグデータマイニング...

ディープラーニングに関しては、こちらをお読みください

編集者注: この記事の著者は、USTC のジュニアクラスの卒業生で投資家の Wang Chuan で...

...

タッチから音声へ: 音声テクノロジーが IoT 環境をどう変えるか

猛威を振るう新型コロナウイルス感染症のパンデミックは、経済と社会に大きな打撃を与えている。この世界的...

...

ロボットが製造業にもたらした変化は実に目覚ましいものがあります。

知能ロボットの誕生は、国内の多くの産業に新たな力をもたらしました。ロボットの導入により、サービス業は...

...

自然言語処理がヒラリーとトランプの「話し方」を分析

[[173621]]編集者注:現地時間10月9日、米国大統領選挙の2人の候補者による第2回公開討論会...

...

AIデータサービス業界は「認知戦争」に突入。なぜYunce Dataは業界No.1の座を維持しているのか?

新しいインフラストラクチャにより、AI の実装が加速され、その背後にある「糧」である AI データ ...

...

...

...

今日のアルゴリズム: 文字列の乗算

[[421393]]この記事はWeChatの公開アカウント「3分でフロントエンドを学ぶ」から転載した...