The project
The project started with a production inspection step that operators performed by hand. I worked with the manufacturing engineers to identify what the system needed to inspect, set the quality tolerances, and determine where computer vision could improve the process.
I built the first prototype in Python with OpenCV and deployed it on a Raspberry Pi 5. The inspection pipeline combined contour detection and template matching to compare captured images against stored references and quality tolerances. A custom GUI provided live monitoring, inspection logs, and operator controls, which allowed the prototype to run as a self-contained station during evaluation.
In the controlled setup, I measured the prototype's detection accuracy and compared it with published figures for human visual inspection. The prototype measured up to 60% higher in that comparison.
Moving to an industrial platform
Once the prototype had proved out the approach, the next step was an industrial-grade vision platform. The selection balanced performance, ease of integration, and budget against Gentex's manufacturing environment, and landed on a system that could talk to the existing PLCs and robot controllers over Ethernet/IP and industrial I/O modules.
The industrial platform added adaptive thresholding, morphological operations for feature enhancement, and lens-distortion correction via camera calibration, so parts could be measured precisely under real production lighting.
With the vision system in place, I worked with the manufacturing engineering team to design and prototype automation cells: programming Fanuc robots to handle parts, integrating the vision system for real-time inspection, and designing custom end-effectors for part handling.
Two vendors with no supported way to talk
The vision platform and the Fanuc controller had no plug-and-play path between them, or at least not one that could be stood up inside the internship's timeframe. Until they could talk, the cell could not act on an inspection result, which stalled everything downstream of the camera.
So I wrote Python firmware for a microcontroller that sat between the two and translated Ethernet/IP traffic into discrete I/O the Fanuc could consume. Nobody would ship that as the permanent integration and it was never meant to be one. What it did was give the cell real-time inspection results and object-location feedback during testing, so the automation work kept moving while the clean integration stayed a later problem.
That is where the most useful lesson of the summer came from. Off-the-shelf components from different vendors do not automatically work together, and the gaps between them get closed by whoever needs the system to run. The schedule turned out to be a design constraint like any other: the real choice was not between a good integration and a bad one, it was between the clean integration that would not land in time and the workaround that would.
What I learned
This was my first industry experience, and plenty of the learning had nothing to do with the vision system. A class project has one audience: a grader. Here the daily audience was manufacturing engineers, operators, and technicians, and progress depended on knowing whose concerns mattered at which stage.
The lesson I use most came from sitting on the receiving end of other people's designs. Manufacturing sees parts as they actually arrive: geometry that fights the fixture, features that are hard to present to a camera, steps that are easy for a hand and awkward for a robot, drawings that have drifted from what is on the floor. Each of those becomes someone's custom fixture, end-effector, or workaround. Design for manufacturing stopped being a chapter heading and became a habit.
Computer vision in a working factory is also a different problem from computer vision in a lab. The prototype ran in a controlled environment and behaved. Production offered changing lighting, parts arriving in slightly different positions, and surfaces that reflect or vary enough to break clean feature extraction. Much of the real engineering was making the pipeline tolerant of that variation instead of assuming it away.
Image credits
- Contour example: PyImageSearch — "Finding extreme points in contours with OpenCV" (Apr 11, 2016).
- Template matching example: ren482, "Fast Shape-based Template Matching," DEV Community (Dec 22, 2024).
- Vision-based inspection example: ifm electronic gmbh, "Area calculator illustration" (© ifm).
Images used for portfolio demonstration purposes only. Gentex logo used for identification only — Gentex Corporation is not affiliated with this site.