On a salmon farm with 20 cages and 500,000 fish, daily rounds take 6–8 hours of staff time. Missing early disease symptoms—like SRS or IHN—leads to losses in the hundreds of thousands of dollars. We've developed an AI system that monitors fish health 24/7 using underwater cameras and computer vision. Our experience includes over 30 deployments in Norway, Chile, and Canada. The system reduces feed costs by 10–15% and cuts mortality by up to 70% in the first 48 hours. Equipment warranty is 12 months, and certifications confirm reliability.
Underwater cameras with CV analytics monitor continuously, capturing the slightest changes in behavior and appearance. Every farm is unique—we adapt the solution to your cages, depth, lighting, and fish species.
In this article, we'll break down which indicators we track, what technical challenges we solve for underwater imaging, and how we integrate the system with feeding.
How does video analytics work in murky water?
Underwater imaging is not the same as above water. Specifics:
- Light scattering: at depths of 4–6 m, colors shift to blue/green spectrum, the red channel attenuates exponentially.
- Particulate matter: turbidity creates artifacts similar to bubbles or scales.
- Surface glare: disrupts lighting in the upper part of the cage.
- Constant water movement: motion blur, blurred frames.
Preprocessing: white balance correction per Snell's law (red channel restoration proportional to depth), CLAHE for contrast on murky images, temporal deblurring for motion blur.
def underwater_white_balance(image, depth_m):
"""Red channel restoration for underwater images"""
img_float = image.astype(np.float32) / 255.0
# Absorption coefficient for red channel in water ~0.35/m
red_attenuation = np.exp(-0.35 * depth_m)
img_float[:, :, 2] = np.clip(
img_float[:, :, 2] / (red_attenuation + 1e-6), 0, 1
)
return (img_float * 255).astype(np.uint8)
How do we calibrate cameras for different depths?
For each cage, we perform calibration: capture a test pattern at multiple depths, adjust white balance and CLAHE parameters individually. This ensures stable image quality under changing lighting and seasonal turbidity.How does the system detect diseases?
Behavioral anomalies—unhealthy fish display abnormal behavior: lethargy, change in swimming depth, disoriented movement, refusal to feed. Video analytics tracks:
- Average swimming speed of fish in the cage (fps frame-to-frame optical flow).
- Depth distribution (from stereo camera or structured light).
- Gill movement rate (respiratory rate)—accelerated breathing is a sign of hypoxia or infection.
Visual disease signs—body ulcers, darkened scales, exophthalmia, fin rot. Object detector YOLOv8 on cropped individual fish.
Mortality—automatic count of surfaced fish. Critically important to catch the early sign: increase in % of dead fish on the surface.
Comparison of fish counting methods
| Method | Accuracy | Processing time | Implementation complexity |
|---|---|---|---|
| Direct counting (Instance segmentation) | 90–95% | 200 ms/frame | High (requires GPU) |
| Density estimation (regression) | 80–85% | 50 ms/frame | Medium |
| Sonar (ultrasound) | 70% | 500 ms | Low, but no video |
Direct counting via Mask R-CNN with track deduplication yields maximum accuracy but requires a powerful GPU. Density estimation is faster and simpler but less accurate. The choice depends on cage size and accuracy requirements.
Biomass estimation
Counting fish in a cage is a challenge due to significant occlusion (fish overlapping). Methods:
- Direct counting via Instance segmentation (Mask R-CNN) + track deduplication.
- Density estimation—regression model predicts fish density in the frame, multiplied by cage volume.
Biomass estimation (average weight): stereo camera measures body length (BL) → allometric formula W = a × BL^b (species-specific coefficients). Weight estimation accuracy: ±8–12% of actual.
Integration with feeding systems
Behavioral patterns of fish are a direct indicator of appetite. The CV system measures "feeding activity" (movement intensity near the surface during feed delivery) and sends a signal to the automatic feeding system: reduce feed delivery when appetite is low (sign of disease or overfeeding). This reduces feed costs by 8–15% and decreases environmental pollution from uneaten feed.
Why implement AI monitoring?
- Early disease detection 24–48 hours before visible symptoms—mortality reduced by up to 70%.
- Feed savings up to $50,000 per year for a farm with 500,000 fish.
- Reduced manual labor by 6–8 hours per day.
- Automatic reporting and data access via dashboard.
Additional comparison table of disease detection methods:
| Method | Time to diagnose | Accuracy | Cost |
|---|---|---|---|
| Visual inspection | 2–4 hours per cage | ~50% | Low |
| Laboratory PCR | 24–48 hours | >99% | High |
| AI analysis | Instant | 90–95% | Medium |
Implementation stages
- Farm audit: assess cages, lighting, telecommunications.
- Design: select cameras, installation schedule.
- Installation and calibration: adjust preprocessing to specific conditions.
- Model training: fine-tune YOLOv8 on your video (few-shot).
- Testing and deployment: A/B comparison with manual monitoring.
What is included in our work
- API and dashboard documentation.
- Access to cloud or on-premise system.
- Staff training (2 days).
- 24/7 technical support for the first 3 months.
- 12-month warranty service.
Timelines
Basic monitoring system (5–10 cameras, behavior + mortality): 8–12 weeks. Full platform with disease detection, biomass, feeding integration: 16–24 weeks. Pricing is calculated individually.
Order a pilot project with 2 cameras and get first results in 6 weeks. Get a consultation—our engineers will help select the optimal configuration.







