Introducing the Scanneri (under construction)

Hello everyone. I am writing from Argentina, using automatic translation because my English is very poor.

I have been working as an editor and documentary filmmaker since 2001, in a self-managed group called Mascaró Cine (www.mascarocine.org). I graduated as an electronics technician in the 1980s and was a programmer in the 1990s, but I hardly remember anything about that… My brother, who is an electromechanical technician, is helping me with the movement and mechanics.

Based on the need to digitize 30 large 35mm rolls (generally in good condition, with old soccer images), and seeing some of your examples, I decided to build a scanner.

I have been reading the posts for several months (sometimes more than once) and based on these readings, I have been refining my decisions based on what I already have and the available budget. What I am putting together is based on a Raspberry Pi 5 with an Arducam Raspberry Pi HQ Camera Module, 12.3MP IMX477, which has a C-mount to Canon EOS EF mount adapter. After several tests with the different lenses I had on hand, inverters, and focus rings, I came to the conclusion that the best option is a Canon 18-135mm.

I have a light to illuminate the film from behind and a support for it (Amazon.com : JJC Photo Slide and Film Digitizing LED Light Kit with 35mm Film Strips and Slides Holder, 10-Levels Brightness Shoe Mount LED Backlight for Photo Negatives Scanning Copying : Electronics).

First test of the connection, light, camera, and RPi 5:

https://youtu.be/MkN34Y1NBz0

(yes, that’s a young Diego Armando Maradona there)

I ran several sensor tests that didn’t work, and so far the best result I’ve had is using OpenCV to detect frame changes and perforations. The idea is that with this information, I can advance/stop the motor to make the capture.

Second test with OpenCV detection and manual movement:

https://youtube.com/shorts/amw8YfTTa_w?feature=share

Regarding the movement of the belt, my brother is considering this configuration:

https://drive.google.com/file/d/1Mif2hLWweUCyMApLvLo-aGVAzAP2zxRP/view?usp=drive_link

As I am about to start transporting the tape, I need to ask you about the type of motor you recommend. I know it should be stepper, probably a NEMA 23, but I don’t know what torque I need or how to calculate it. I am thinking of something based on this project, with a single motor that moves the parts and the roll. What do you think?

https://www.youtube.com/watch?v=1LBrPp7YTXA

I grew up editing movies on computers, so I have little to no experience with film. I even wonder why the tape spins so many times in the equipment… anyway, I’m here to learn. Any comments or suggestions are welcome. I know it’s not an easy undertaking, but I trust in collective intelligence to move these projects forward, and of course I am available to share or help in any way you think necessary. Thank you very much.

Photos of the project:

https://drive.google.com/drive/folders/1uus3y47V57qR6lWa9uNGoDgYAxXn4enw?usp=sharing

Videos

https://www.youtube.com/playlist?list=PLttC-5UygTjY19Bxm9bDm3GcEeGjVzq1z

3 Likes

Bienvenido a Kinograph @Carmelo

Very nice start on your project, and thank you for sharing your progress.

Regarding your question about the steppers, suggest you check out Roland’s all format scanner, in particular he is using NEMA23 with closed loop Integrated motor.

In Ronald’s project, the Reel is mounted directly on the stepper axle.

Look forward to seeing more of your project. Buena suerte!

1 Like

Hello @Carmelo congratulations for your project!!!

I’m also trying a design with opencv for perforation detection and I like your approach. Seems to run nicely :wink:

You are using findContours() and a trigger for count the perforations? Or you have another framework.

Saludos desde Brasil

Hola Felipe! un gusto saludarte.

Hace muchos años trabajé como programador, estuve a punto de actualizarme pero de pronto (y por el momento) me estoy ayudando con IA para la parte de control. La última actualización que hice fue sacar el detector de frame, ya que tengo celuloide en el que no se notan las separaciones de fotograma. Si te sirve, te adjunto el código (en proceso, pero funcionando) que estoy usando ahora para las primeras pruebas. La misma cámara que captura hace la detección de perforaciones. Funciona así: en la primera solapa ajusto el primer fotograma (manualmente, porque no tengo todavía conectado el motor) y selecciono el ROI (la zona) donde está la primera perforación. Después en Captura, toma la foto, mueve el motor hasta detectar la cuarta perforación y para para tomar una nueva captura…. va adjunto el archivo. En qué etapa está tu proyecto? saludos!

Scanneri_V4.py.zip (2.7 KB)

Hola, @Carmelo

¡Muchas gracias por el código y pela explicación! Me han ayudado a comprender mejor varios puntos.

Yo também estoy recurriendo a la asistencia de IA, ya que mis conocimientos de Python son limitados. Sin embargo, el proyecto resulta muy interesante porque uno va aprendiendo sobre la marcha.

Mi proyecto consiste más bien en una “Moviola” (tipo Steenbeck) orientada a minimizar el estrés físico del film y, aun así, permitir el visionado de las películas. Considero que en los archivos fílmicos hacen falta equipos de visualización que sean respetuosos con la preservación (preservation-friendly) e que no cuesten miles de dólares.

En este sentido, estoy utilizando un sistema de transporte manual en una mesa de inspección (es decir, con transporte continuo), una Raspberry Pi Zero 2W, un Camera Module 3 y piezas diseñadas para impresión 3D. Próximamente compartiré algunas imágenes por este medio para mostrar los avances.

En cuanto al código, también estoy aplicando um ROI en las perforaciones. Utilizo un disparador (trigger) en la parte superior y la función findContours de OpenCV para detectar la forma de las perforaciones tras binarizar la imagen. Al igual que su propuesta, el sistema captura un fotograma cada cuatro perforaciones. Mi mayor inconveniente es que la Raspberry Pi Zero 2W presenta un cuello de botella en el CPU, a pesar de que la cámara transmite a 90 fps. Al ser un hardware de recursos limitados, si el film avanza demasiado rápido, el sistema pierde el conteo de perforaciones y el cuadro se desplaza. Por este motivo, su enfoque podría orientarme sobre cómo resolver este problema.

Adjunto el enlace al repositorio de GitHub por si desea revisar el código (el archivo más actualizado es miniola_debug.py): https://github.com/FelipeCastroRGB/miniola/blob/desenvolvimento/README.md

¡Seguimos en contacto! ¡Un gran abrazo!

1 Like

Oi Felipe.

El problema también es el que el IMX708 es rolling-shutter y la imagen en movimiento se distorsiona.