Cheap endoscope cameras can be used for soft robot, surgical robot, or any application needing a small camera. You can get one for around $20 on Amazon.
‘Geek szitman supercamera’ is a camera chip using the com.useeplus.protocol
(officially only working on iOS/Android apps like ‘Usee Plus’).
Only firmware version 1.00 has been tested. USB descriptors can be found in file the descriptors folder.
Contrary to the advertised specification, the camera resolution is 640×480.
First install the required packages:
sudo apt-get update
sudo apt-get install -y \
libusb-1.0-0-dev \
pkg-config \
build-essential \
cmake \
libopencv-dev \
python3-pipCreate the USB rule file so the USB device can be accessed by all users
echo 'SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="2ce3", ATTRS{idProduct}=="3828", MODE="0666"' | sudo tee /etc/udev/rules.d/99-supercamera.rulesThen reload and trigger the rules:
sudo udevadm control --reload-rules
sudo udevadm triggerImportant: disconnect and reconnect the USB cable so udev applies new permissions.
Verify permissions:
lsusb | grep 2ce3:3828
# Expected: Bus 001 Device 009: ID 2ce3:3828
ls -l /dev/bus/usb/001/009
# Expected: crw-rw-rw- ... /dev/bus/usb/001/009The bus/device numbers (001/009 above) must match your actual lsusb output.
Build with CMake under the root directory of the repo:
cmake -S . -B build
cmake --build build -jLegacy Makefile build is still available:
makePlease follow USAGE.md for usage instructions.
Feel free to open an issue.
Please recompile with VERBOSE = 3 and include full logs.
If your hardware is different, do include its USB descriptors:
lsusb -vd $(lsusb | grep Geek | awk '{print $6}')Additional udev rule for alternate VID/PID
Some devices enumerate as 0329:2022. Add this rule if needed:
echo 'SUBSYSTEMS=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0329", ATTRS{idProduct}=="2022", MODE="0666"' | sudo tee -a /etc/udev/rules.d/99-supercamera.rulesKnown issues:
fatal: usb device not found: check your device is properly plugged in. Check you have added udev rules properly. Try to run the program with root privileges:sudo ./out.
This repo is made possible thanks to @hbens for reverse engineering the USB protocol and sharing the details in his repo, which made this project possible.
