mirror of
https://github.com/DeeJanuz/frametop.git
synced 2026-10-06 14:00:10 +02:00
- Programs: ft-camd (the camera broker), ft-hands (the tracker), and ft-handreplay and ft-ringplay for recordings, built by hands/build.sh into hands/build/ with one Makefile. The first build fetches ncnn at frame-hands' pinned tag and builds it with the same options. - ft-camd gets its privileges from file capabilities (CAP_SYS_PTRACE, CAP_PERFMON, CAP_DAC_READ_SEARCH) that hands/run.sh install sets with sudo, and drops them once set up. It still works under sudo. It runs on the host, linked statically, as frametop-camd.service. ft-hands runs in the dev container as frametop-hands.service. Both start and stop with SteamVR. - Files move to /run/user/UID/frametop/ (cam-ring, hands, gestures), not $XDG_RUNTIME_DIR, which a terminal in the Frametop desktop has its own of. SIGUSR1 recordings go to ~/.local/share/frametop/hands. - The calibration is read through /run/host in the container. - Settings: HANDS_SWAP_SIDES and HANDS_CPUS in frametop.conf. - install.sh offers hand tracking as an optional last step. - The container gets jsoncpp-devel, glibc-static, and NumPy and OpenCV for the Python tools. - tools/ring.py reads the ring, and models/NOTICE credits the Apache-2.0 models. Checked: ft-handreplay gives identical summaries and byte-identical depth dumps to frame-hands' fh-replay on both 2026-09-29 recordings. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
2.4 KiB
Makefile
50 lines
2.4 KiB
Makefile
# Hand tracking, built into build/ (hands/build.sh runs this in the dev container):
|
|
# make ft-camd (camd/: runs on the host, so linked statically) and ft-hands (track/)
|
|
# make tools ft-handreplay and ft-ringplay, for recordings
|
|
# The first build fetches ncnn (NCNN_TAG) and builds it into build/ncnn, which takes a few
|
|
# minutes. NCNN=DIR uses an ncnn install already built instead.
|
|
NCNN_TAG = 20260526
|
|
NCNN ?= build/ncnn/install
|
|
CFLAGS ?= -O2 -g -Wall -Wextra -Wno-unused-parameter
|
|
CXXFLAGS ?= -O2 -g -Wall -Wextra -Wno-unused-parameter -Wno-psabi
|
|
CXXFLAGS += -std=c++17 -fopenmp -I$(NCNN)/include/ncnn
|
|
LDLIBS = $(NCNN)/lib/libncnn.a -ljsoncpp -fopenmp -lpthread
|
|
|
|
CAMD = camd/camd.c camd/tp.c camd/xrcams.c
|
|
TRACK = track/calib.cpp track/nets.cpp track/tracker.cpp track/io.cpp track/record.cpp track/pinch.cpp
|
|
HDR = $(wildcard track/*.h) camd/fhring.h include/fh_hands.h include/fh_gestures.h
|
|
|
|
all: build/ft-camd build/ft-hands
|
|
tools: build/ft-handreplay build/ft-ringplay
|
|
|
|
build/ft-camd: $(CAMD) camd/tp.h camd/xrcams.h camd/fhring.h
|
|
@mkdir -p build
|
|
$(CC) $(CFLAGS) -static -o $@ $(CAMD) -lm
|
|
|
|
build/ft-hands: track/main.cpp $(TRACK) $(HDR) $(NCNN)/lib/libncnn.a
|
|
@mkdir -p build
|
|
$(CXX) $(CXXFLAGS) -o $@ track/main.cpp $(TRACK) $(LDLIBS)
|
|
|
|
build/ft-handreplay: track/replay.cpp $(TRACK) $(HDR) $(NCNN)/lib/libncnn.a
|
|
@mkdir -p build
|
|
$(CXX) $(CXXFLAGS) -o $@ track/replay.cpp $(TRACK) $(LDLIBS)
|
|
|
|
build/ft-ringplay: track/ringplay.cpp track/record.h camd/fhring.h
|
|
@mkdir -p build
|
|
$(CXX) $(CXXFLAGS) -o $@ track/ringplay.cpp
|
|
|
|
# ncnn as frame-hands built it (the models were converted and quantized for it), minus its tools
|
|
build/ncnn/install/lib/libncnn.a:
|
|
rm -rf build/ncnn && mkdir -p build/ncnn
|
|
git clone -q --depth 1 --branch $(NCNN_TAG) -c advice.detachedHead=false https://github.com/Tencent/ncnn.git build/ncnn/src
|
|
cmake -S build/ncnn/src -B build/ncnn/build -G Ninja -Wno-dev -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_PREFIX=$(CURDIR)/build/ncnn/install -DCMAKE_INSTALL_LIBDIR=lib -DNCNN_VULKAN=OFF \
|
|
-DNCNN_OPENMP=ON -DNCNN_INT8=ON -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_TOOLS=OFF -DNCNN_BUILD_EXAMPLES=OFF \
|
|
-DNCNN_BUILD_BENCHMARK=OFF -DNCNN_BUILD_TESTS=OFF -DNCNN_PYTHON=OFF > build/ncnn/cmake.log
|
|
cmake --build build/ncnn/build --target install > build/ncnn/build.log
|
|
|
|
clean:
|
|
rm -f build/ft-camd build/ft-hands build/ft-handreplay build/ft-ringplay
|
|
|
|
.PHONY: all tools clean
|