見出し画像

パソコン用の無音カメラをPythonで作る

パソコン用無音カメラを作りましたので作り方を紹介したいと思います。

前はPowerShellでカメラを自動操作するやつを作ったんですけど、ちょっと動作が不正操作っぽくって、怪しいんでPythonで無音カメラを作りました。



動作条件

 OSはWindows10以降
 ノートPCまたはWEBカメラ付きデスクトップ
 言語はPython
 PythonをExe化するのでPython非搭載のパソコンでも動く


環境準備

1.Pythonをインストール

 まずは、Pythonをインストールします。インストール済みなら読み飛ばしてください。
 Windowsの画面左下にあるスタートアイコンを右クリックしてWindows10ならPowerShell(管理者)、Windows11ならターミナル(管理者)を選んでPowerShellを立ち上げます。そしてPowerShell画面に次のコマンドを入力するとインストールできます。

winget install -i --id Python.Python.3.12  #3.12のところは最新版の数字がいい


2.OpenCVインストール

 Pythonでカメラを扱うためにOpenCVというライブラリをインストールします。PowerShellを立ち上げるか、ターミナルを開いて次のコマンドを入力します。

pip install opencv-contrib-python


プログラム

 次がPythonのプログラムです。
メモ帳などに貼り付けてmuon_camera.pyとかで保存してください。

import os
import sys
import winreg
import cv2
import datetime

# 実行中のフォルダを取得
def get_executable_directory():
    if getattr(sys, 'frozen', False):  # PyInstallerでコンパイルされた場合
        executable_path = sys.executable
    else:
        executable_path = __file__
    
    return os.path.dirname(os.path.abspath(executable_path))

# カメラロールフォルダを取得
def get_cameraroll_folder():
    # レジストリキーのパス
    reg_path = r"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
    reg_name = "My Pictures"

    pictures_folder = ""
    # レジストリキーを開く
    with winreg.OpenKey(winreg.HKEY_CURRENT_USER, reg_path) as key:
        # フォルダパスを取得
        pictures_folder = winreg.QueryValueEx(key, reg_name)[0]

    if pictures_folder != "":
      pictures_folder += "\\Camera Roll\\"

    if (os.path.exists(pictures_folder) and os.path.isdir(pictures_folder)):
      return pictures_folder
    else:
      return get_executable_directory()


# 現在の日時を取得
def get_current_datetime_formatted():
    now = datetime.datetime.now()
    formatted_datetime = now.strftime("%Y%m%d_%H%M%S")
    return formatted_datetime


# 画像を保存先を取得する
cameraroll_folder = get_cameraroll_folder()

# カメラを開く
cap = cv2.VideoCapture(0)

# 画像をキャプチャする
ret, frame = cap.read()

if ret == True:
  # 画像名作成
  imagename = get_current_datetime_formatted() + ".jpg"

  # 画像を保存する
  cv2.imwrite(cameraroll_folder+imagename, frame)

# カメラを閉じる
cap.release()


保存出来たらテスト実行してみましょう。
PowerShell画面に次のコマンドを打ち込みます。

python muon_camera.py

カメラのライトが一瞬光って、カメラロールフォルダに写真が保存されたら成功。

全く無音でほとんど気づかれないことが分かります。


Exe化

Pythonがインストールされていない環境でも使えるようにEXE化します。

詳しくは「pyinstall python」で検索してほしいのですが、最低限必要なコマンドだけ書きます。

exe化に必要なpyinstallerをインストール

pip install pyinstaller

exe化

pyinstaller muon_camera.py --onefile --noconsole 

これでmuon_camera.exeというファイルが出来上がり。
このmuon_camera.exeはPythonが入っていないパソコン上でも動作します。
一瞬だけカメラランプが光り、撮影して、カメラロールフォルダに保存されます。



#WEBカメラ #無音カメラ #Python #PowerShell #資産管理システム #SkySea #LanScope


いいなと思ったら応援しよう!