This article is reproduced from the Verimake blog: Verimake.
Demo video: Video.
The operation of this tutorial is mainly based on StarFive’s VisionFive 2 development board. For specific information about the board or other products, refer to the official website. For the open-source technical documentation and installation tutorials for VisionFive 2, refer to the official documentation.
1. Installing Debian OS on VisionFive 2
1.1 Burn Debian OS onto Micro-SD
This section refers to section 3.3 in the official documentation on how to burn the OS to a Micro-SD card.
[Preparation] Prepare a 32GB Micro-SD card. Connect the Micro-SD card to your computer using an external or built-in card reader. Format the Micro-SD card.
For macOS users, the Micro-SD card may not appear when inserted. You can use the command diskutil list
in the terminal to confirm if the target Micro-SD card is recognized. Then, format the Micro-SD card using the command sudo diskutil eraseDisk FAT32 SDCARD MBRFormat </dev/...>
, where </dev/...>
is the specific name of the target Micro-SD card.
[Download the system] Download the latest version of the Debian image from the link provided by StarFive Technology (link). Extract the file with the .bz2
extension from the sd
folder.
[Burning process] The document recommends using BalenaEtcher. Click the download link to install and run BalenaEtcher. Click “Flash from File” and select the previously extracted .img
file. Click “Select target” and choose the connected Micro-SD card. Finally, click “Flash!” to start the burning process.
1.1 Login to Debian
In the “Login to Debian” section of the official documentation, three login methods are provided:
This tutorial mainly uses the USB to serial connection with a macOS computer for login. If you want to try other methods, refer to the official documentation.
Hardware connection
Refer to the following diagram to connect the serial port and connect the USB to serial converter to your personal computer.
Install Minicom
To install Minicom on macOS, you need to use Homebrew. First, install Homebrew by entering the following command in the terminal:
/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"
Then, enter the command to install minicom:
brew install minicom
Connect the serial port
First, you need to know the device name for the USB serial connection. Use the command ls /dev/tty.*
to view all the connected serial devices on your computer and find the ID of the target device (e.g., /dev/tty.usbmodem102
, where usbmodem102
is the device ID, and /dev/tty.
remains the same). After obtaining the device ID, enter the following command to connect to the serial device:
minicom -D /dev/tty.<deviceID> -b 115200
Start the device
Enter the username and password to log in. You can log in using either the “root” or “user” username, with the password being “starfive”.
2. Python 3 Environment Setup
The official documentation provides a shell command to install dependencies, including Firefox browser and python-opencv, using a one-click installation package. First, download the corresponding file. This step requires VisionFive 2 to be connected to the internet, which can be achieved by connecting an Ethernet cable to the Ethernet interface.
wget https://github.com/starfive-tech/Debian/releases/download/v0.8.0-engineering-release-wayland/install_package_and_dependencies.sh
This step can be completed on the terminal of VisionFive 2 or downloaded on your personal computer and transferred to VisionFive 2 (you can also create a file with the same name on VisionFive 2 and copy all the content). Run the shell script for installing the package and dependencies.
chmod +x install_package_and_dependencies.sh
sudo ./install_package_and_dependencies.sh
This installation process may take a while, possibly 2-3 hours.
3. Face Recognition using OpenCV
[Hardware Configuration] This article uses a USB camera. The current version of VisionFive 2 does not support pyqt, which means that the program cannot display the content captured by the camera. To verify the availability of your own camera, enter the following Python command in the terminal:
python3
If Python 3 is successfully configured, the Python programming interface will be displayed. Enter the following code in this interface:
import cv2
print(cv2.VideoCapture(index=4, apiPreference=cv2.CAP_V4L2)) # USB camera
Here, the default index for an external USB camera is 4. It is recommended to use the command sudo v4l2-ctl --list-devices
in the terminal to check the number after /dev/video
under the “USB Camera” section to confirm the index.
If the camera information is printed without any errors, it indicates that the camera is working correctly.
[Face Recognition] Once the camera is successfully read, you can start writing programs related to face recognition. Since Qt cannot be used, it is best to enter the command export QT_QPA_PLATFORM=offscreen
in the terminal to use the offscreen mode.
4. Example Demo
Here is a simple example. The camera will read the information and print True/False in the output to indicate whether a face is detected. Create a new Python document and enter nano test1.py
in the terminal to enter the nano editor. Enter the following code:
import cv2
import time
# Load the cascade classifier model
face_cascade = cv2.CascadeClassifier("/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml")
# Open the camera
cap = cv2.VideoCapture(4, cv2.CAP_V4L2)
# Create a timer
start_time = time.time()
while True:
# Read the camera image
ret, frame = cap.read()
# Convert the image to grayscale
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Detect faces
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# Check if faces are detected
if len(faces) > 0:
has_face = True
else:
has_face = False
# Print the result
print(has_face)
# Check if 30 seconds have elapsed
elapsed_time = time.time() - start_time
if elapsed_time >= 30:
break
# Wait for a while to ensure the program finishes
time.sleep(2)
# End the program
exit()
The default frontal face model haarcascade_frontalface_default.xml
is used here. In the /usr/share/opencv4/haarcascades
directory, there are other models available for different types of face recognition, such as eye detection, etc.
Example Demonstration
As demonstrated in this tutorial, we have created a video in collaboration with StarFive, showcasing the remote control of paper flowers using face recognition. You can watch the video here.