Switching to device paths

This commit is contained in:
boltgolt 2018-11-09 16:33:19 +01:00
parent b8c1730f65
commit 2e58a8d10e
No known key found for this signature in database
GPG key ID: BECEC9937E1AAE26
3 changed files with 43 additions and 38 deletions

View file

@ -7,6 +7,8 @@ script:
- debuild -i -us -uc -b
# Install the binary, running the debian scripts in the process
- sudo apt install ../*.deb -y
# Confirm the dlib module has been installed correctly
- 'python3 -c "import dlib; print(dlib.__version__); print(\"OK\")"'
# Confirm the face_recognition module has been installed correctly
- 'python3 -c "import face_recognition; print(\"OK\")" | ack-grep --passthru "OK"'
# Check if the username passthough works correctly with sudo
@ -14,6 +16,7 @@ script:
- 'sudo howdy | ack-grep --passthru --color "current active user: travis"'
# Remove howdy from the installation
- sudo apt purge howdy -y
- streamer --help
notifications:
email:

6
debian/postinst vendored
View file

@ -83,18 +83,20 @@ handleStatus(subprocess.call(["pip3 install --upgrade pip"], shell=True))
log("Installing python dependencies")
# Install exact dependencies through pip
handleStatus(subprocess.call(["pip3", "install", "--cache-dir", "/tmp/pip_howdy", "face_recognition_models==0.3.0", "Click>=6.0", "numpy", "Pillow", "dlib", "opencv-python"]))
handleStatus(subprocess.call(["pip3", "install", "--cache-dir", "/tmp/pip_howdy", "face_recognition_models==0.3.0", "Click>=6.0", "numpy", "Pillow", "dlib"]))
log("Installing face_recognition")
# Install face_recognition though pip
handleStatus(subprocess.call(["pip3", "install", "--cache-dir", "/tmp/pip_howdy", "--no-deps", "face_recognition==1.2.2"]))
handleStatus(subprocess.call(["pip3", "install", "--cache-dir", "/tmp/pip_howdy", "face_recognition==1.2.2"]))
handleStatus(subprocess.call(["pip3", "install", "--cache-dir", "/tmp/pip_howdy", "opencv-python"]))
log("Configuring howdy")
# Manually change the camera id to the one picked
for line in fileinput.input(["/lib/security/howdy/config.ini"], inplace = 1):
print(line.replace("device_id = 1", "device_id = " + picked), end="")
print("Camera ID saved")
# Secure the howdy folder
handleStatus(subprocess.call(["chmod 600 -R /lib/security/howdy/"], shell=True))

72
debian/preinst vendored
View file

@ -35,7 +35,7 @@ if "install" not in sys.argv:
sys.exit(0)
# The default picked video device id
picked = -1
picked = ""
print(col(1) + "Starting IR camera check...\n" + col(0))
@ -45,55 +45,55 @@ if "HOWDY_NO_PROMPT" in os.environ:
# Write the default device to disk and exit
with open("/tmp/howdy_picked_device", "w") as out_file:
out_file.write("0")
out_file.write("none")
sys.exit(0)
# Get all devices
devices = os.listdir("/dev")
devices = os.listdir("/dev/v4l/by-path")
print(devices)
# Loop though all devices
for dev in devices:
# Only use the video devices
if (dev[:5] == "video"):
time.sleep(.5)
time.sleep(.5)
# The full path to the device is the default name
device_name = "/dev/" + dev
# Get the udevadm details to try to get a better name
udevadm = subprocess.check_output(["udevadm info -r --query=all -n " + device_name], shell=True).decode("utf-8")
# The full path to the device is the default name
device_name = "/dev/v4l/by-path/" + dev
# Get the udevadm details to try to get a better name
udevadm = subprocess.check_output(["udevadm info -r --query=all -n " + device_name], shell=True).decode("utf-8")
# Loop though udevadm to search for a better name
for line in udevadm.split("\n"):
# Match it and encase it in quotes
re_name = re.search('product.*=(.*)$', line, re.IGNORECASE)
if re_name:
device_name = '"' + re_name.group(1) + '"'
# Loop though udevadm to search for a better name
for line in udevadm.split("\n"):
# Match it and encase it in quotes
re_name = re.search('product.*=(.*)$', line, re.IGNORECASE)
if re_name:
device_name = '"' + re_name.group(1) + '"'
# Show what device we're using
print("Trying " + device_name)
# Show what device we're using
print("Trying " + device_name)
# Let fswebcam keep the camera open in the background
sub = subprocess.Popen(["fswebcam -S 9999999999 -d /dev/" + dev + " /dev/null 2>/dev/null"], shell=True, preexec_fn=os.setsid)
# Let fswebcam keep the camera open in the background
sub = subprocess.Popen(["streamer -t 1:0:0 -c /dev/v4l/by-path/" + dev + " -b 16 -f rgb24 -o /dev/null 1>/dev/null 2>/dev/null"], shell=True, preexec_fn=os.setsid)
try:
# Ask the user if this is the right one
print(col(2) + "One of your cameras should now be on." + col(0))
ans = input("Did your IR emitters turn on? [y/N]: ")
except KeyboardInterrupt:
# Kill fswebcam if the user aborts
os.killpg(os.getpgid(sub.pid), signal.SIGTERM)
raise
# The user has answered, kill fswebcam
try:
# Ask the user if this is the right one
print(col(2) + "One of your cameras should now be on." + col(0))
ans = input("Did your IR emitters turn on? [y/N]: ")
except KeyboardInterrupt:
# Kill fswebcam if the user aborts
os.killpg(os.getpgid(sub.pid), signal.SIGTERM)
raise
# Set this camera as picked if the answer was yes, go to the next one if no
if ans.lower().strip() == "y" or ans.lower().strip() == "yes":
picked = dev[5:]
break
else:
print("Interpreting as a " + col(3) + "\"NO\"\n" + col(0))
# The user has answered, kill fswebcam
os.killpg(os.getpgid(sub.pid), signal.SIGTERM)
# Set this camera as picked if the answer was yes, go to the next one if no
if ans.lower().strip() == "y" or ans.lower().strip() == "yes":
picked = dev[5:]
break
else:
print("Interpreting as a " + col(3) + "\"NO\"\n" + col(0))
# Abort if no camera was picked
if picked == -1: