Skaner przezroczy na Raspberry Pi

Skaner przezroczy na Raspberry Pi
Pobierz PDF Download icon

Zanim fotografia cyfrowa weszła w nasze życie i stała się wszechobecna, ludzie drukowali swoje zdjęcia na papierze lub w postaci przezroczy. Te ostatnie stały się szczególnie popularne, gdyż można było je łatwo prezentować znajomym czy rodzinie. To dobra zabawa, szczególnie w czasach, gdy nie było rozrywek takich jak Internet.

Przezrocza znane są chyba każdemu z nas, a przynajmniej wszystkim czytelnikom powyżej 30. roku życia. Na tym medium utrwalano zdjęcia rodzinne, wycieczki, ale także prezentacje w szkołach, na uczelniach czy bajki. Obecnie do prezentowania tego rodzaju treści wykorzystuje się komputery – prezentacje powstają w PowerPoincie, a zdjęcia umieszczamy na Facebooku czy Instagramie.

Co jednak, jeśli chcemy pochwalić się starymi zdjęciami rodzinnymi? Nie ma prostych metod na przeniesienie zdjęć z przezroczy do komputera w domu. Dlatego też autor tej konstrukcji – Jaap Meijers, zdecydował się na samodzielną budowę automatycznego skanera przezroczy w oparciu na Raspberry Pi. System taki będzie potrzebny, dopóki przeźrocza wciąż znajdują się na strychach ludzi i pozostają pudełka pełne 35-milimetrowych slajdów, które nadal nie zostały zdigitalizowane.

Ogromną zaletą zaprezentowanej konstrukcji jest automatyzacja. Dostępne są manualne skanery slajdów tego rodzaju, na przykład w postaci przystawek do zwykłych skanerów. Jednakże ludzie kupują skaner do slajdów i dowiadują się wtedy, że skanowanie dużej kolekcji to dużo pracy. Jest tak głównie dlatego, że trzeba ręcznie wkładać slajdy i skanować je jeden po drugim. Jak podaje Meijers, przetworzenie kolekcji 2000 przeźroczy, które zostawił mu teść, zajmie mu co najmniej 50 godzin ciężkiej pracy. Nikt nie porwie się na takie zadanie. Oczywiście są firmy, które oferują digitalizację wszystkich tych pudełek z przeźroczami, ale ich usługi nie są tanie – kosztów nikt nie chce, dlatego też konieczne było inne rozwiązanie.

Prostym rozwiązaniem tego problemu jest modyfikacja starego projektora do przeźroczy i wykorzystanie np. Raspberry Pi z modułem kamery, aby stworzyć superszybki skaner slajdów Pi może automatycznie przełączać slajdy i przechowywać obrazy na dysku lub online, a także obsługiwać moduł kamery. Kamery dostępne dla Raspberry Pi łączą się z komputerem jednopłytkowym za pomocą szybkiego interfejsu, dzięki czemu cały system może pracować z dosyć dużą wydajnością. Dodatkowo wykorzystanie komputera do skanowania daje duże możliwości dalszej obróbki skanów przeźroczy.

Materiały

Do zestawienia urządzenia potrzebne będą następujące podzespoły i materiały:

  • stary projektor do przeźroczy,
  • komputer jednopłytkowy Raspberry Pi wraz z kartą SD odpowiedniej pojemności i zasilaczem 5 V o wydajności prądowej co najmniej 2 A,
  • moduł kamery Raspberry Pi Camera Module v2,
  • tranzystor TIP120 oraz opornik 1 kΩ,
  • płytka uniwersalna, taśma izolacyjna, kable itp.,
  • żelowy filtr szary (filtr ND, filtr neutralny).

Przydatne będą umiejętności lutowania, ale nie ma co do tego wielkich wymagań. Przyda się także multimetr i dostęp do drukarki 3D, aby wydrukować kilka elementów mechanicznych.

Potrzebny będzie raczej starszy projektor przeźroczy. Wymaganych jest kilka opcji i funkcji, które powinien posiadać, aby urządzenie pozwoliło na sprawną pracę. Autor nabył w tym celu dosyć stary model – Voigtländer Spezial PM 35 A, za 17 euro w sklepie z używanymi rzeczami. Dobierając projektor, należy upewnić się, że ma on następujące funkcje:

  • autofokus,
  • przycisk do przełączania slajdów (na urządzeniu lub na pilocie),
  • automatyczny mechanizm do przekładania slajdów,
  • łatwa do zdjęcia obudowa,
  • możliwość wykorzystywania uniwersalnych zasobników na przeźrocza.

Użycie starego projektora

Projektory do slajdów mają całkiem ciekawy zestaw elementów optycznych (fotografia 1). Idąc od tyłu do przodu systemu, znajduje się tam wklęsłe lustro paraboliczne, lampa halogenowa i dwie soczewki kondensorowe, które skupiają światło i równomiernie je rozprowadzają. Pomiędzy nimi znajduje się tzw. filtr ciepła – szklany kwadrat, który blokuje promieniowanie podczerwone z lampy halogenowej, przepuszczając dalej tylko światło widzialne. Za soczewką znajduje się ramka, która trzyma slajdy i soczewki projektora.

Fotografia 1. Optyka projektora do przezroczy

Autor wyjął z systemu obiektyw projektora, po prostu odkręcając go tak długo, aż udało się wykręcić cały detal. Żarówka wolframowa (zasilana 24  V o mocy 150 W) jest niesamowicie jasna, ale wytwarza też dużo ciepła. Kamera dla Raspberry Pi powinna być w stanie obsłużyć jasne światło na swoim chipie, ale ciepło nie jest zbyt dobre dla tego rodzaju wrażliwych komponentów. Wyjęcie płasko-wypukłego obiektywu znacznie zmniejsza ilość światła i ciepła docierającego do aparatu. W rzeczywistości kamera nie potrzebuje aż tyle światła, ponieważ obraz nie musi być wyświetlany na dużym ekranie po drugiej stronie pokoju, a jedynie na sensorze aparatu.

Jednak nawet bez wymienionego elementu toru optycznego światło nadal jest tak jasne, że zdjęcia robione kamerą dołączoną do RPi będą przeważnie prześwietlone, zwłaszcza jaśniejsze części obrazu. Aby zablokować trochę więcej światła, autor użył arkusza filtra szarego. Jest to filtr, którego używają fotografowie, aby blokować część światła w aparatach, aby tworzyć zdjęcia z długim czasem naświetlania, nawet przy jasnym świetle dziennym. Zanim autor zaczął korzystać z tego rodzaju filtra, próbował przykleić biały arkusz plastiku, akrylu, a nawet papier do uchwytu slajdów, jednakże materiały te nie redukowały dostatecznie natężenia światła i nie poprawiały jakości obrazów. Niebezpieczne było też nagrzanie plastiku – temperatura zwiększała się do tego stopnia, że zachodziło ryzyko emisji niezdrowych gazów z użytego tworzywa sztucznego.

Innym możliwym podejściem do digitalizacji slajdów czy negatywów jest wykorzystanie panelu superjasnych diod LED. Podstawową zaletą zachowania oryginalnej konfiguracji jest jednak to, że można użyć mechanizmu projektora do transportu slajdów, aby szybko zeskanować wiele z nich.

Naciskanie przycisku

Rzutnik do slajdów, który autor zakupił do projektu, miał pilota, z przewodem, dzięki czemu mógł być obsługiwany np. z kanapy. Układ automatycznie przesuwał kolejne slajdy w zasobniku, uruchamiając mechanizm sterowany elektromagnesem (fotografia 2).

Fotografia 2. Solenoid, który sterowany jest przyciskiem

Aby system działał sprawnie, trzeba podłączyć go do Raspberry Pi. Przewody pilota są idealnym sposobem na realizację tego zadania. Po przecięciu przewodu możliwe było zmierzenie napięcia – projektor wysyła na przełącznik napięcie 31 V. Raspberry Pi samo z siebie nie poradzi sobie z tak wysokim napięciem, więc potrzebuje trochę pomocy w postaci tranzystora w układzie Darlingtona – np. TIP120. Tranzystory MOSFET są bardziej wydajne niż tranzystory Darlingtona i nie nagrzewają się tak szybko, ale wiele z nich może przełączać napięcia najwyżej do 30 V. TIP120 może wytrzymać do 60 V i wystarczy, aby zamknąć obwód na krótką chwilę, więc w tym zastosowaniu doskonale się sprawdzi. Lewy pin tranzystora został podłączony do pinu 24 GPIO na płytce Raspberry Pi. Aby ograniczyć prąd płynący przez tranzystor, należy dodać do układu rezystor 1 kΩ (rysunek 1).

Rysunek 1. Schemat podłączenia cewki solenoidu do Raspberry Pi

Środkowy pin tranzystora łączymy z przewodem z przełącznika projektora, a prawy pin łączymy z pinem masy Raspberry Pi i masą projektora. Po przetestowaniu obwodu na płytce uniwersalnej, aby sprawdzić, czy działa poprawnie, komponenty można polutować na stałe i umieścić np. w obudowie rzutnika do przeźroczy.

Kamera

Konieczne jest znalezienie sposóbu na trwałe i stabilne umieszczenie kamery w projektorze, ale najlepiej w taki sposób, aby możliwe było jej delikatne przesuwanie celem precyzyjnego ustawienia względem toru optycznego. Autor w tym celu zastosował wydrukowaną w 3D obudowę. Jakość druku była bardzo dobra, a obudowa ma ładną i błyszczącą powierzchnię, jak widać na fotografii 3. Normalnie nie byłoby to żadnym problemem, a nawet byłoby zaletą, jednakże w systemie optycznym błyszcząca powierzchnia to ryzyko powstawania niepożądanych odblasków. Aby temu zapobiec, należy trochę przeszlifować obudowę modułu kamery.

Fotografia 3. Moduł kamery w wydrukowanej w 3D obudowie

Umieszczenie kamery wewnątrz projektora w odpowiedniej odległości i zogniskowanie na niej obrazu przeźrocza jest nie lada wyzwaniem. Autor użył gumki do owinięcia obudowy aparatu i pustej teraz obudowy obiektywu projektora. Ułatwia to obracanie kamery, gdy jest nachylona względem slajdów, ale prawdopodobnie lepiej byłoby ją tak zbudować, aby nie ruszała się ponownie z pozycji, gdy projektor jest np. przenoszony.

W górnej części projektora należy wyciąć mały otwór, którym można wyprowadzić płaski kabel z kamery. Raspberry Pi jest wyposażone w złącze CSI, które jest przeznaczone specjalnie dla kamery. Kabel umieszczamy w złączu, po jego otwarciu, niebieskim paskiem taśmy w kierunku portu USB. Po zaciśnięciu złącza kabel jest pewnie podłączony. Prowadząc okablowanie, należy upewnić się, że płaski kabel nie opiera się o nic przewodzącego (np. port Ethernet), ponieważ może to powodować zakłócenia w transmisji danych. Teraz można podłączyć Raspberry Pi do prądu oraz dołączyć do niego wszystkie elementy.

Robienie zdjęć z zastosowaniem Pythona

Możemy zacząć robić zdjęcia. Autor używa Raspbiana na Raspberry Pi 2 z podłączonym monitorem, myszą i klawiaturą. W pierwszej kolejności w konfiguracji Raspberry Pi (polecenie sudo raspi-config) konieczne jest włączenie interfejsu kamery. W środowisku graficznym można to zrobić poprzez menu Preferencje → konfiguracja Raspberry Pi → Interfejsy. Niezależnie, w jaki sposób zmieniliśmy konfigurację, na tym etapie należy uruchomić system ponownie.

Nowa instalacja Raspbian ma już najaktualniejszą wersję oprogramowania kamery, ale w innych systemach operacyjnych można (i warto) ją aktualizować za pomocą terminalu poleceniem:

sudo apt-get update
sudo apt-get install python-picamera python3-picamera

Aby zrobić zdjęcie, wystarczy w terminalu wpisać polecenie:

raspistill -o foto.jpg

Jednak najpierw potrzebne jest uruchomienie wideo, które pomoże nam ustawić ostrość aparatu i przetestować działanie systemu. W tym celu tworzymy nowy plik w języku Python, korzystając z terminalu lub używając środowiska IDE języka Python, za pomocą menu aplikacji → Programowanie → Python 3 (IDLE). W pliku tym umieszczamy następujący kod:

from picamera import PiCamera
from time import sleep
camera = PiCamera()
camera.start_preview()
sleep(60) # wyłącz kamerę po upływie 60 sekund
camera.stop_preview()

Skrypt zapisujemy jako camera.py, a następnie uruchamiamy. Efektem powinien być obraz wideo z kamery.

Modyfikacja kamery Raspberry Pi – obiektyw makro

Teraz, gdy możliwe jest zobaczenie tego, co rejestruje kamera, można ustawić ostrość i pozycję kamery we właściwy sposób. Kamera Pi niestety nie ma autofocusa. Jest to ten sam przetwornik obrazu, który jest używany w milionach telefonów komórkowych (Sony IMX219). Fabrycznie jest ustawiona nieskończona głębia ostrości i zapewnia wspaniałe, ostre zdjęcia... ale tylko z minimalnej odległości od 50 do 75 centymetrów. W omawianym skanerze slajdów to nie zadziała, ponieważ z tej odległości slajdy byłyby o wiele za małe, co oznacza, że nie wykorzystalibyśmy całej 8-megapikselowej rozdzielczości aparatu do ich uchwycenia. Ponadto moduł kamery musiałby znajdować się pół metra od projektora, co jest bardzo niepraktyczne.

Jednym ze sposobów rozwiązania tego problemu byłoby kupienie obiektywu makro, takiego jak te przeznaczone do telefonów komórkowych, ale prawdopodobnie nie dałoby to optymalnych rezultatów, jeśli chodzi o jakość obrazu. Na szczęście, przy odrobinie wysiłku, można trochę odkręcić obiektyw, żeby zmienić miejsce płaszczyzny ostrości kamery Raspberry Pi. Do zestawu z kamerą Raspberry Pi do tego celu dołączono specjalną plastikową gałkę. Można jej użyć do obrócenia obiektywu o dwa obroty w kierunku przeciwnym do ruchu wskazówek zegara. Trochę to dziwne i niekoniecznie intuicyjne, ale wynik jest imponujący: naprawdę ostre obrazy uzyskiwane są w odległości już około 4 centymetrów przy takiej konfiguracji. Teraz kamera może być wystarczająco blisko, aby slajd był prawie w całości widoczny. Im krótsza jest odległość ostrości, tym głębia ostrości jest mniejsza. Oznacza to, że konieczne jest precyzyjne ustawienie wszystkich elementów względem siebie, aby skanowany slajd był w pełni ostry.

Jeśli w Twoim zestawie nie ma narzędzia do ustawiania ostrości w aparacie, to pamiętaj, aby nie obracać obiektywu szczypcami czy kombinerkami. Łatwo można w ten sposób uszkodzić obiektyw. Na portalu Thingiverse.com dostępnych jest kilka projektów narzędzia do obracania obiektywu kamery Raspberry Pi, nadających się do drukowania w 3D. Przed obróceniem obiektywu można narysować małą kreskę ołówkiem obok soczewki i jej uchwytu, aby w razie potrzeby można było obrócić soczewkę z powrotem do jej pierwotnego położenia.

Skanowanie dużej liczby przeźroczy

Teraz utworzymy folder na Raspberry Pi: /home/pi/scanned_sllides/. Umieszczamy w nim plik tekstowy /home/pi/serialnumber_slides.txt zawierający tylko „0”. Następnie tworzymy plik diascanner.py (listing 1). Skrypt ten powoduje naciskanie przycisku projektora, wysyłając sygnał przez port GPIO do tranzystora sterującego solenoidem. Robi to przez 0,05 sekundy (50 milisekund), czyli mniej więcej tyle, ile minimalnie zajmuje człowiekowi naciśnięcie przycisku. Następnie system wykona zdjęcie i zapisze je na dysku. Cały cykl powtórzy się zdefiniowaną wcześniej liczbę razy.

Listing 1. Kod, który należy umieścić w pliku diascanner.py, realizujący skanowanie przeźroczy

import RPi.GPIO as GPIO
import time
import os
from picamera import PiCamera
import sys

script, aantal = sys.argv # argumenty przekazane do skryptu
NumberOfSlidesLeftToDo = int(aantal)
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(24, GPIO.OUT)

camera = PiCamera()
camera.led = False # Wyłącz LED kamery
camera.resolution = (3280, 2464) # Rozdzielczość pierwszej wersji Pi Camera to 2592 x 1944
camera.framerate = 15 # Konieczne, aby wykorztystać maksymalną rozdzielczość

f = open(‘/home/pi/serialnumber_slides.txt’, ‘r’)
serialnumber = int(f.readline())
f.close()

while NumberOfSlidesLeftToDo > 0:
GPIO.output(24,1)
print (‘Button pressed’)
time.sleep(0.05)
GPIO.output(24,0)
print(‘Button not pressed’)
time.sleep(2) # Oczekiwanie na załadowanie slajdów
camera.start_preview() # Czas uruchamiania kamery
serialnumber += 1
print (‘Slide ‘ + str(serialnumber) + ‘...’)
camera.awb_mode = ‘auto’
camera.brightness = 50
# Tutaj wykonane jest zdjęcie
camera.capture(‘/home/pi/scanned_slides/dia_’ + str(format(serialnumber, "05d")) + ‘.jpg’, format=’jpeg’, quality=100)
time.sleep(0.6)
print (‘ saved.\n’)
fw = open(‘/home/pi/serialnumber_slides.txt’, ‘w’) # Zapisanie informacji o zdjęciu
fw.write(str(serialnumber))
fw.close()
NumberOfSlidesLeftToDo = NumberOfSlidesLeftToDo - 1

Teraz należy tylko uruchomić skrypt w wierszu poleceń za pomocą prostej komendy:

python diascanner.py 1

jeśli chcemy powtórzyć cykl tylko raz (zeskanować jedno przeźrocze). Zamiast jedynki wpisać możemy dowolną inną liczbę, zależnie od tego ile przygotowaliśmy slajdów do skanowania.

Przyspieszenie działania systemu

Otrzymywane skany nie są niestety tak dobre, jak pochodzące z profesjonalnego skanera. Aby uzyskać zdjęcia zbliżone do ich jakości, trzeba poświęcić sporo czasu na idealne ogniskowanie i pomiar światła, a nawet wtedy wyniki mogą nie być satysfakcjonujące. Profesjonalne skanery do slajdów wykorzystują prawdziwy skan zamiast robienia zdjęć slajdów. Skutkuje to cyfrowymi zdjęciami o znacznie większym zakresie dynamiki – i za to się płaci. Jednak uzyskany wynik jest tak dobry, jak pochodzący z większości domowych skanerów do slajdów.

Zmodyfikowany projektor do slajdów ma jedną dużą przewagę nad skanerami do slajdów: jest niesamowicie szybki! Można za jego pomocą szybko zeskanować tysiące slajdów. Nawet jeśli jakość nie jest najlepsza, to można wybrane przeźrocza zeskanować profesjonalnie. Brak konieczności skanowania każdego zabytkowego zdjęcia z wakacji lub nieostrego zdjęcia kwiatów pozwala zaoszczędzić dużo czasu i pieniędzy. Ile czasu może nam więc zaoszczędzić automatyczny skaner slajdów? Aby uzyskać punkt odniesienia, autor konstrukcji zapytał członka swojej rodziny o jego wysiłki w zakresie skanowania przeźroczy. Miał on kolekcję ponad dwóch tysięcy slajdów. Korzystając ze skanera slajdów, który kupił, a który mieści tylko cztery slajdy, stara się zdigitalizować swoją kolekcję. Musi ręcznie wyjąć cztery slajdy z tacy slajdów, włożyć je do tacy małego skanera, a następnie nacisnąć przycisk w oprogramowaniu skanera na swoim komputerze.

W ten sposób skanowanie i zapisywanie zajmuje około 1,5 minuty na slajd. Zeskanowanie 2000 slajdów zajęłoby mu zatem 50 godzin. Nawet gdyby chciał spędzać w każdy weekend dwie godziny z swoim powolnym skanerem slajdów, digitalizacja wszystkich starych zdjęć zajęłaby mu sześć miesięcy. Właśnie dlatego wszystkie slajdy są nadal nietknięte w pudełkach…

Fotografia 4. Skaner gotowy do pracy i załadowany przeźroczami

Szybkość opisywanego skanera zależy głównie od tego, jak szybko projektor może zmieniać slajdy: w tym przypadku jest to około 2,4 sekundy. Oznacza to, że całą tacę, zawierającą pięćdziesiąt slajdów (fotografia 4), można zdigitalizować w ciągu dwóch minut. Dwa tysiące slajdów można sfotografować w ciągu 1,5 godziny, zamiast spędzać pięćdziesiąt godzin przy skanerze kupionym w sklepie. Urządzenie może działać nawet szybciej, jeśli użyje się parametru camera.exposure_mode = ‘off’, aby pominąć automatyczny pomiar światła. To wymaga dokładnego ustawienia poziomu ekspozycji, ale jeśli ma się do dyspozycji podobnego rodzaju zdjęcia, to może się ono sprawdzać. Wszystkie ustawienia dla Pi Cam można znaleźć w dokumentacji, dostępnej pod adresem http://picamera.readthedocs.io. Wyświetlanie podglądu na monitorze można wyłączyć. Teoretycznie skanowanie można skrócić do zaledwie 1,8 sekundy na slajd, co oznacza, że całą kolekcję dwóch tysięcy przeźroczy zeskanować można w czasie niespełna godziny.

Dalsze plany

Nawet ten niesamowity skaner slajdów można ulepszyć. Przydatne byłoby dodanie np. przenośnika taśmowego, który wsuwa tace do projektora jedna po drugiej – czy nie byłoby to fajne? W takim przypadku potrzebuje również czujników do wykrywania, kiedy zaczyna się nowa taca (do numerowania zdjęć) i wykrywania, kiedy wszystkie tace są gotowe, a zdjęcia zeskanowane, aby system mógł się zatrzymać.

Autor chciałby wykorzystać dodatkowo OpenCV do rozpoznawania obrazów, tak aby system mógł automatycznie dodać opis do każdego zdjęcia, kategoryzować je (bardzo przydatne w przypadku dużej kolekcji zdjęć), a może nawet automatycznie je obracać do pionu.

Jeśli chodzi o inne plany, to autor chciałby także ułatwić ustawianie ostrości i obracanie aparatu. Jedną z opcji jest wycięcie długiej szczeliny w górnej części projektora i użyciu nakrętki i śruby przymocowanej do obudowy kamery, aby móc przesuwać moduł kamery w czasie jej justowania. Najważniejsze jednak, co można by obecnie poprawić, to oświetlenie. Autor eksperymentował z 3-watową diodą LED, ale rozproszenie tak jasnego światła i uzyskanie odpowiedniego balansu ustawieniami aparatu jest dość trudne. Konieczne wydaje się połączenie wielu różnych czasów ekspozycji w celu uzyskania zdjęcia o najwyższym zakresie dynamicznym.

Nikodem Czechowski, EP

Źródło: https://bit.ly/3u8RMIK

Artykuł ukazał się w
Elektronika Praktyczna
maj 2021
DO POBRANIA
Pobierz PDF Download icon

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik listopad 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje listopad 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna listopad 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich grudzień 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów