Python driver for USB endoscopes that use the supercamera / useeplus protocol — the cheap endoscopes sold under brands like Oasis, Depstech, and others that only work with the "UseeePlus" mobile app.
These devices don't implement standard UVC, so they won't show up as webcams. This package talks to them directly over USB and gives you JPEG frames or numpy arrays.
| USB ID | Device name | Status |
|---|---|---|
2ce3:3828 |
supercamera (Geek szitman) | Tested with Vividia FC-5550i |
0329:2022 |
supercamera (variant) | Untested — reported compatible |
Check yours with lsusb (Linux) or system_profiler SPUSBDataType (macOS).
pip install supercameraFor OpenCV/numpy support (.read() returns numpy arrays):
pip install supercamera[opencv]from supercamera import Camera
# Like cv2.VideoCapture
with Camera() as cam:
ret, frame = cam.read() # numpy array (BGR), requires opencv
# or
jpeg_bytes = cam.read_jpeg() # raw JPEG, no extra depsfrom supercamera import Camera, list_devices
list_devices() # returns list of CameraInfo with bus/address
Camera(index=0) # first camera
Camera(index=1) # second cameraNote: these devices often share the same serial number, so use index or bus/address to distinguish them.
supercamera --list # list connected cameras
supercamera # capture one frame
supercamera -n 10 # capture 10 frames
supercamera -i 1 # use second camera
supercamera --show # live view (requires opencv-python)from supercamera import is_valid_jpeg
is_valid_jpeg(jpeg_bytes) # True/False (uses Pillow full decode if available)import cv2
from supercamera import Camera
cam = Camera()
while True:
ret, frame = cam.read()
if not ret:
continue
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow("endoscope", gray)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cam.release()These endoscopes use a proprietary USB protocol (com.useeplus.protocol) instead of UVC. The driver:
- Claims USB interfaces, sends magic init (
ff 55 ff 55 ee 10) and connect command (bb aa 05 00 00) - Reads bulk USB packets containing JPEG-encoded 640x480 frames
- Properly resets the device on disconnect so it's ready for the next session
Resolution is 640x480 regardless of what the product listing claims.
Plug in one or both cameras, then:
python test_camera.pyRuns: device listing, single capture, 3x reconnect (no replug), OpenCV read, and two-camera simultaneous capture (if two connected).
- macOS: Tested. Works out of the box.
- Linux: Untested. Should work (pyusb/libusb). May need udev rules for non-root access.
- Windows: Untested. May need libusb + Zadig.
Protocol reverse-engineered by:
- hbens/geek-szitman-supercamera (C++ PoC, CC0)
- MAkcanca/useeplus-linux-driver (Linux kernel driver)
MIT