15Projects, in full

Fifteen projects, in full.

Back to the selection

Fifteen samples from more than 80 projects. Each one says what it does, what my part was, and one fact you can check. The write-ups do not say which client each project was for; the photos and results come from the projects themselves. Where a photo cannot show the mechanism, a 3D view or a small simulation drawn live in your browser stands in. Click a thumbnail to switch the view; click the image to see it full size.

A grey car with a roof-mounted sensor pod driving onto a runway
A white sensor pod on a metal frame bolted to a car roof, under a blue sky
Front view of a car with a white sensor pod raised above the windscreen
A white pickup with a roof sensor pod on an apron, an airliner taking off behind it
A small metal fragment lying on sunlit taxiway pavement
Close view of cracked runway concrete with a spalled hole
A worker in high-visibility clothing bending beside a yellow airport vehicle

From the project · Pick a view

Day job · Vision R&D · 2023–now

Vision R&D at Oreyeon: the Mobile Detection Unit, from sensors to edge SoC

Oreyeon’s Mobile Detection Unit rides on an airport’s own patrol vehicle and inspects the pavement as it drives: foreign object debris and pavement damage are flagged, classified, sized and geolocated as the vehicle passes, down to objects under 2 cm, by day and by night, with no internet connection. I joined in April 2023 as senior lead computer vision engineer and lead the vision work, fully remote. New algorithms are researched in Matlab and Python, then written in C/C++ and deployed on AI-ready systems-on-chip with CUDA and TensorRT. Topics so far: integrating and fusing the unit’s sensors (cameras, IMU, GPS), online camera calibration, stitching, feature matching, object detection and tracking.

My part
Sensor integration and fusion (cameras, IMU, GPS), algorithm design and the C/C++ implementation, test environments for validation and non-regression, validation in real conditions, and the technical lead of the vision work
Fact to check
The Mobile Detection Unit : debris and pavement damage, objects under 2 cm, geolocated, EASA and FAA compliant
Photos
Oreyeon
  • Python · Matlab
  • C/C++
  • CUDA · TensorRT
  • Sensor fusion
  • Calibration
  • Edge SoC

From the project · Pick a view

Freelance · Embedded AI · Drones

Real-time visual tracking on a Jetson for FPV drones

The operator picks one target in the video and the drone keeps it locked while both move. A state-of-the-art tracking model was adapted and optimised for NVIDIA Jetson, with a live-streaming path that holds a true 30 fps with low latency between camera and screen.

My part
Model selection and evaluation on the UAV123, UAV123L and DTB70 benchmarks, the Jetson optimisation, and the 30 fps streaming architecture
Fact to check
Up to 30 fps at 1280×740 on a Jetson Orin Nano Super
  • Jetson Orin
  • TensorRT
  • C++
  • Python
  • UAV123
Surveillance view of a meeting room with a wooden table, mesh chairs and books on a side table
Black-and-white infrared view of a room with a striped wall, a door and two monitors
Top-down view of a kitchen counter; a person seen from above enters at the bottom
High-angle view of an open office with rows of desks, monitors and mesh chairs

From the project · Pick a view

Freelance · Video analytics · Jetson

A multi-camera pipeline on DeepStream 7, now with a local vision-language model

One generic pipeline takes RTSP cameras, batches them on the GPU of a Jetson Orin Nano Super, runs a TensorRT detector and emits events. Cameras can be added or removed and the model swapped while it runs; rolling recording, snapshots and a debug view sit beside the inference without slowing it. In 2026 the pipeline gained a scene-analysis stage: selected frames go to a small vision-language model served locally by llama.cpp, which answers short questions about the scene. Nine models were tried inside the 8 GB budget; six would not even load until the switch to memory-mapped GGUF weights. The evaluation also showed the limits honestly: these models describe what they see, not why, and a staged theft on a kitchen camera read as ordinary work to all five models tested.

My part
Architecture and implementation of the pipeline and its Python interface, the test suite and the feature-impact benchmark; then the VLM integration and its evaluation: memory, latency, prompt design, concurrency
Fact to check
4 streams: 87 detections/s at 25 % CPU and 873 MB RSS, recording costs under 9 % of throughput. A yes/no question is answered in 0.3 s (SmolVLM2-500M) to 3 s (Cosmos-Reason2-2B); a full description takes 50 to 60 s
Model choice
SmolVLM2 for alerts (four cameras in parallel in about 3 s), Cosmos-Reason2-2B for periodic scene analysis, Qwen3-VL-2B for detailed reports
  • DeepStream 7
  • GStreamer
  • TensorRT
  • llama.cpp
  • VLM
  • Python
  • RTSP
A small thermal camera module and a Jetson Orin Nano developer board on a wooden desk

From the project · Pick a view

Freelance · Thermal · Embedded AI

A thermal object detector, from camera choice to live alerts

A real-time detector for outdoor thermal video, built from nothing: choosing the LWIR camera for the range, field of view, resolution and sensitivity required; the camera-to-processor acquisition pipeline; data collection and labelling guidelines; a custom YOLO model; and a multithreaded C++ inference pipeline with boxes and alert logic. The clips are handheld LWIR recordings from the field at dusk. On the close ones, a generic YOLO11 detector with BoT-SORT boxes each deer and tracks it through the camera motion; on the hard cases, deer half hidden in tall grass or small at the edge of the brush, it finds nothing, which is why the project trains its own model, and a CSRT tracker started on the deer holds it instead.

My part
The whole chain, from the requirements to the embedded deployment
Status
Model trained on the collected set; live outdoor testing on an NVIDIA Jetson in progress
  • LWIR
  • YOLO
  • C++ multithreading
  • Jetson
  • Labelling
A black gimbal camera on a steel bracket bolted to a car roof in a workshop
Thermal street scene with cyclists, shown at native resolution and super-resolved
Front view of a car with a gimbal camera mounted on a roof bar

From the project · Pick a view

Freelance · Thermal · Deep learning

On-device super-resolution for a vehicle-mounted thermal gimbal

A gimbal camera on a car roof sees far, but the thermal sensor’s pixels are coarse. A lightweight super-resolution network doubles the resolution of every frame on the processor next to the sensor, so the sharper image is available where it is needed, without sending video elsewhere.

My part
The super-resolution model and its on-device deployment
Fact to check
2× upscale, 256×320 → 512×640 per frame, on the device
  • Super-resolution
  • PyTorch
  • Edge inference
  • LWIR
  • Gimbal
Side-by-side thermal image of a residential street, flat on the left and detailed on the right

From the project · Pick a view

Freelance · Thermal · Image quality

HDR tone mapping for thermal video

Thermal sensors produce 16-bit data; displays and most detectors take 8. A single hot object makes a linear mapping flatten everything else. This tone-mapping stage compresses the range locally, so sky, buildings and the hot engine all stay readable, while the image keeps a natural look rather than an over-processed one.

My part
Algorithm design and the image-quality tuning on the client’s footage
Fact to check
16-bit → 8-bit, detail preserved in both the coldest and hottest regions of the same frame
  • Tone mapping
  • Python
  • C++
  • LWIR

Freelance · Robotics · 3D vision

Vision-guided bin picking and assembly, without fixtures

A robot picks sheet-metal parts from a bin and assembles an enclosure (body, cover, two clips) from camera input alone. The closed loop runs in Isaac Sim with a UR10e: a depth-only pick proposal, a four-channel YOLO segmentation on RGB-D, a depth shape fit that identifies the part, FoundationPose with the fitted mesh, tracking of what is already assembled, and cuRobo for the motion. Ground truth is used only to grade. The pipeline was then put through 17 appearance perturbations (low light, glare, haze, blur, sensor noise, white-balance drift and more): pick targets stayed sub-millimetre, the place side flipped by 180° on the symmetric cover in 11 cases until an anchoring rule fixed all of them, and perturbation-augmented training hardened the segmentation.

My part
The perception pipeline (segmentation, shape fit, pose, grasp points), the symmetry handling and the pick-order logic
Status
Works in simulation under all 17 perturbations, with a ZED 2 depth-noise model in the loop; now moving to real scenes
Fact to check
Place flips 11/17 → 0 with anchoring; pose error 0.4 to 3 mm over 9 picks × 18 conditions
  • Isaac Sim
  • YOLO RGB-D
  • FoundationPose
  • cuRobo
  • 6-DoF pose
  • Python

From the project · Pick a view

Freelance · Industrial · C++

Perception pipeline for an industrial 3D time-of-flight camera

A smart camera that measures objects on a production line in 3D and gives a pass/fail answer by itself. The sensor is a 320 × 240 time-of-flight imager (850 nm laser illumination, 0.3 to 7.5 m, 37° × 28° field of view, up to 20 fps) and everything runs inside the camera: from the raw depth and amplitude images to a filtered point cloud, a taught background, segmentation of the objects in user-drawn regions, object statistics (length, width, height, orientation), contour alignment and pose. The embedded functions ship as three use cases (distance measurement in up to 64 regions, completeness checks of compartmentalised packaging, and object sizing to about ±5 mm), configured without code and exposed over IO-Link, digital outputs and a REST API. Two years of C++ on that pipeline, up to a product launched in November 2025.

My part
Image-processing and computer-vision pipeline in C++ over two years: depth and amplitude handling, point clouds, segmentation and mask refinement, auto-thresholding, contour alignment scoring, object statistics
Fact to check
Public datasheet: 320 × 240 ToF, 300 to 7500 mm, ±5 mm, three embedded use cases (distance, completeness, sizing), REST API; demonstrated at a trade fair in November 2024, launched November 2025
  • C++
  • 3D ToF
  • Point clouds
  • Segmentation
  • IO-Link
  • REST API
  • Embedded
Four side-by-side grey line-camera views of a fabric web with a dark info box in the top-left corner
An industrial camera clamped under a perforated steel rail
A wide white textured fabric web unrolling in front of a dark machine frame

From the project · Pick a view

Freelance · Industrial · Deep learning

Defect detection on textured surfaces for a production line

Wrinkles, yellowed areas, black spots and other irregularities on moving fabric. Classical image processing and statistics worked at first, but texture variability across materials, lighting and production settings made the parameters hard to maintain. The system moved to deep-learning detection and classification with real-time size estimation, running on edge hardware.

My part
The classical pipeline, then the deep-learning models and their edge deployment
Fact to check
Several texture types handled without per-material tuning; defect size estimated in real time
  • OpenCV
  • PyTorch
  • C++
  • Edge
  • Industrial cameras

From the project · Pick a view

Freelance · Agriculture · PyTorch

Feed-bunk monitoring in dairy barns from fixed cameras

A proof of concept for a dairy-tech client: from fixed barn cameras, segment the feed bunk and classify it as full, low or empty; detect and count the cows feeding; and recognise feed delivery and feed push-up by the two tractors. A time-series view per camera smooths the status between deliveries, so each transition happens once.

My part
Annotation guidelines, the PyTorch segmentation, classification and detection models, training, metrics, and the report
Fact to check
Delivered as a repository with model, code and metrics, evaluated across three camera angles for generalisation
  • PyTorch
  • Segmentation
  • Faster R-CNN
  • CVAT
  • Time series

Freelance · Retail · C++

Real-time people counting on a CPU

It counts people in stores, malls and open areas in real time. YOLOv5 detection and ByteTrack tracking, written in C++ on the NCNN library, so it runs on ordinary CPUs and small boards with no GPU. Tracking means each person is counted once, even when a detection is briefly weak.

My part
The whole pipeline in C++: detection, tracking, counting logic and the live display
Fact to check
YOLOv5 + ByteTrack in C++ on NCNN, CPU only
  • YOLOv5
  • ByteTrack
  • NCNN
  • C++
  • CPU
A small helicopter drone on grass with a camera mounted under its frame
A small silver camera with a lens, held in a hand
Two aerial crops of a road marking: blurred on the left, sharp on the right
Rendering of a large image sensor module next to a circuit board with a Zynq chip
An open camera body showing a green circuit board with a Zynq chip, held in a hand
Aerial image with hundreds of small red search boxes and green matched points, with an inset zoom
Aerial image covered in short yellow tracks showing predicted feature motion

From the project · Pick a view

Embedded vision · FPGA · Ph.D.

IMU-aided image stacking in a drone camera

A drone camera that needs a long exposure takes ten short ones at 30 fps instead. FAST corners are found in the first frame, one per block of a 10 × 10 grid; the gyroscopes predict where each one lands in the others, so ZNCC matching only searches an 11 × 11 window; least squares gives the rotation (or a homography) between frames, with outliers dropped; every frame is resampled into the first one’s geometry, exactly at block corners and bilinearly inside, and stacked into one sharp, low-noise image, inside the camera. The surveys were flown on a Copter 1B helicopter UAV from Wikhydro.

My part
Algorithm, FPGA design in VHDL and HLS, and the ARM software, on a Xilinx Zynq 7030 behind a 20 MP CMOS sensor
Fact to check
Feature detection 1.64 s → 0.02 s and resampling 36.9 s → 0.41 s once moved into the FPGA. MDPI Sensors 2017 · UAV-g 2017
  • Zynq FPGA + ARM
  • VHDL
  • HLS
  • C/C++
  • IMU

From the project · Pick a view

HPC · GPU · Postdoc

Tomographic reconstruction on CPUs and GPUs with Kokkos

Two imaging algorithms from CEA’s CIVA software for non-destructive testing: X-ray 3D reconstruction (FDK) and ultrasound imaging (TFM), used to find and size defects in parts. I rewrote them in C++ with Kokkos so a single source runs fast on both multicore CPUs and GPUs. In FDK, every projection is weighted and ramp-filtered row by row, then back-projected into the voxel grid; each voxel only reads the filtered projections, so the back-projection is one parallel loop over the voxels that Kokkos maps to OpenMP threads on a CPU and to CUDA threads on a GPU. The animation shows the method on a small cast part with pores and a crack.

My part
Porting and optimising both algorithms in C++/Kokkos, and evaluating the library across CPU and GPU architectures
Fact to check
Presented at ParCo 2019, Prague
  • C++
  • Kokkos
  • CUDA
  • OpenMP
  • FDK · TFM

From the project · Pick a view

Lynred · 2019–2023 · Infrared · Embedded AI

An AI denoiser for thermal cameras, small enough to live in the camera

Raw thermal video is grainy and striped: temporal noise, fixed-pattern residue, soft edges. On Lynred’s image-signal-processing team I worked on the embedded AI denoising model that became Lynred Denoiser Net (LDN): a compact network that cleans each frame on the camera’s own processor, keeping edges, faint warm details and the natural look of the scene. Lynred presented it at SPIE Defense + Commercial Sensing 2025 alongside its toolbox.

My part
Algorithm and model development in Python on Lynred’s infrared data, and the port of the retained solutions to the product’s constrained chips, as part of the ISP R&D team
Fact to check
Lynred Denoiser Net (LDN), presented by Lynred at SPIE DCS 2025, Proc. SPIE 13469
  • LWIR
  • Denoising
  • CNN
  • Python
  • Embedded port

From the project · Pick a view

Lynred · 2019–2023 · Infrared · Image quality

Image quality for thermal sensors, from the raw pixels up

Straight off an infrared sensor, the image is barely usable: each pixel answers the same scene a little differently and that difference drifts, a few pixels are dead or blink, row and column stripes and temporal grain sit on top of the scene, and the raw range is too wide for a display. On Lynred’s image-signal-processing team I worked on the steps that turn it into a clean picture: non-uniformity correction, defective-pixel detection and replacement, temporal-noise and stripe removal, and contrast and detail enhancement, then detection and tracking on the corrected video. Every algorithm ran in C++ both on a laptop and on the embedded SoC inside the camera.

My part
The algorithms for each step of the chain, their C++ versions for the PC and for the camera’s embedded SoC, and detection and tracking on the corrected video, as part of the ISP R&D team
Fact to check
Corrected, shutterless video straight out of the camera, in Lynred’s public video “Infrared images with ATI modules for UAVs”
  • LWIR
  • Non-uniformity correction
  • Defective pixels
  • Denoising
  • Contrast
  • C++
  • Embedded SoC

Coming soon. New projects and news are being written up and will appear here.

→Contact

Have one like these?

Based in Grenoble, France. Open to freelance projects and R&D collaborations in computer vision, embedded systems and GPU computing.

audiahmad@hotmail.com