Teknisk fotografering med Gphoto och Linux

(This article was originally published by Datormagazin. Republished with permission)

DONE Teknisk fotografering med Gphoto och Linux

En bild säger mer än tusen ord. Det är därför inte så märkligt att det finns ett stort antal programvaror och gränssnitt i den fria programvaruvärlden för att arbeta med bilder på olika sätt.

I den här artikeln skall vi titta på hur du kan realisera dina egna idéer kring teknisk fotografering med applikationer baserade på det ledande gränssnittet för att hantera stillbildskameror under Linux, libgphoto2. Gphoto kan hantera hundratals olika kameramodeller och ge tillgång till både bildfiler och diverse fjärrstyrningsmöjligheter som en kompetent systemkamera kan tillhandahålla.

Med teknisk fotografering menar vi tillämpningar där vi fjärrstyr en kamera och bearbetar bilderna vidare automatiskt. Det finns ett otal exempel, men här är några:

  • stopmotion-filmer
  • bokskanning med kamera
  • timelapse-filmer

Kort översikt av gränssnitt

Innan vi går vidare skall vi helt kort reda ut vilka olika gränsnitt som finns att tillgå, och vad de syftar till.

  • gphoto2. Med gphoto-gränssnittet kan man arbeta med digitala stillbildskameror. Det är möjligheterna detta gränssnitt ger som artikeln kommer att fokusera på.
  • SANE. Sane är en krystad akronym för Scanner Access Now Easy. Med SANE kan man arbeta med olika typer skanners.
  • v4l2. En förkortning video for linux, med vilken man kan använda webkameror och andra enheter för rörlig video.

För att krångla till det kan man definiera Sane-enheter utifrån Gphoto-enheter ,och använda v4l-enheter i Gphoto.

För att förenkla igen kan man använda tumregeln att har man en kompaktkamera eller en systemkamera man vill koppla till sin Linuxdator, så är det gphoto-gränssnittet man vill använda.

Man kan med viss rätt tycka att det borde räckt med ett gränssnitt för att hantera alla olika typer av enheter som kan generera bilder. I linuxvärlden växer gränssnitten oftast fram organiskt, och i det här fallet är enhetstyperna tillräckligt olika för att de olika gränssnitten kan existera sida vid sida.

Befintliga programvaror

Om du någon gång kopplat in din kamera till din linuxdator har du märkt att i normalfallet monterar moderna distributioner automatiskt kameran som ett filsystem. Du kan sedan hantera bildfilerna som vilka filer som helst. Om du använder Gnome så är det under huven abstraktionslagret gvfs som används ovanpå gphoto2.

Om du använder en arkivhanterare för bilder som Shotwell, Digikam eller Darkroom så är det också gphoto2 som används under huven.

De flesta av de här applikationerna finns att tillgå via de olika distributionernas standardkanaler, och för den här artikeln har Fedora 20 använts.

Fjärrstyrning av kamera

Hantering av bildfiler i all ära, men hur gör man om man vill göra något mer avancerat som att fjärrstyra sin kamera?

Gphoto stödjer även detta givet att kameran har stöd för mer avancerade operationer. För att veta om din kamera stödjer de olika typerna av fjärrkontroll kan du kontrollera följande länk:

http://www.gphoto.org/proj/libgphoto2/support.php

Den kamera författaren använde, Canon Eos 100d, har följande egenskaper listade:

Image Capture, Liveview, Configuration, Other Ops 20

Med Image Capture kan vi använda datorn som en fjärrkontroll, instruera kameran att ta en bild från programvara och hämta den som fil. Man kan också be kameran initiera överföringen till programmet, genom att använda avtryckaren. Programmet notifieras då att en bild är tagen, och kan sedan ta emot den för vidare bearbetning på samma sätt som när programvaran initierar bildtagningen själv.

Med Liveview kan man använda kamerans bildsensor som sökare istället för den optiska sökaren, och se bilden i realtid på datorns bildskärm, som med en videokamera.

Med Configuration kan man fjärrstyra inställningar. Slutligen, det diffust namngivna Ops 20 betyder att kameran även har andra egenskaper som kan hanteras.

Ghoto Command Line Client

Gphoto tillhandahåller utöver bibliotek även några exempelklienter som också är praktiskt användbara. Man kan använda gphotos kommandoradklient för applikationer där shellscript är ett naturligt val, till exempel om man vill göra ett webgränsnitt mot sin systemkamera.

Kommandoradsklienten har en utförlig mansida.

Här är ett enkelt exempel på handhavande:

1gphoto2 --shell  #om kameran detekteras skall den väljas automatiskt
2capture-image-and-download

Kameran instrueras nu att ta en bild och gphoto2 hämtar den automatiskt.

Kommandoradsflaggan --shell skapar ett interaktivt skal för att kommunicera och experimentera direkt med kameran. Självklart kan man använda kommandoradsflaggor istället, vilket gör det enkelt att till exempel göra ett enkelt shellscript som tar fem bilder med en sekunds intervall som ett exempel.

1for i in {1..5};do gphoto2 --capture-image-and-download --filename=bild$i.jpg $i;sleep 1;done

När vi har sedan tagit ett antal bilder, kan vi spela upp dem som en film med exempelvis mplayer:

1mplayer mf://bild*.jpg -mf fps=10 -vo x11 -loop 0

Man kan också konvertera bildfilerna till en film:

1mencoder "mf://*.jpg" -mf fps=10 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

Den här tekniken är jämförelsevis primitiv, men ändå mycket användbar.

Man kan tänka sig en applikation som kör gphoto på en Raspberry Pi som är dels kopplad till en systemkamera, dels till ett nätverk. På det sättet kan man ta högkvalitativa time-laps filmer på platser där man inte kan använda en vanlig dator. I det fallet är det en fördel att inte behöva använda ett grafiskt användargränssnitt.

Entangle

Entangle är en applikation för det som oftast kallas tethered photography, som vi väljer att kalla kopplad fotografering. Namnet Entangle kommer från kvantmekanikens värld. Den aningen långsökta analogin är att likt sammansvävda kvantmekaniska partiklar som bildar något nytt med nya egenskaper, så tillåter Entangle samma sak med en kamera och en dator. Ungefär.

Entangle exponerar mycket av gphotos funktionalitet via ett bekvämt grafiskt användargränsnitt.

Entangle har i sin tur ett plugingränsnitt för att utveckla egna tillämpningar. Med Entangles källkod medföljer ett enkelt exempel på en plugin kallad photobox. Denna plugin förändrar Entangles gränssnitt en aning, så enbart en 'Shoot' knapp finns, samt måste man ange ett lösenord för att lämna photoboxs modala läge. Tanken är att man skall kunna bygga en enkel kiosk för fotografering, där användaren skall förhindras att vara allt för klåfingrig i gränssnittet. Photobox är bara en illustration av en sådan tillämpning och tillhandahåller inte den grad av säkerhet som är nödvändig för en verklig kioskapplikation.

Om den applikation du har i åtanke för dina egna experiment liknar Entangle, föreslår vi att du utnyttjar det som Entangle redan erbjuder och utvidgar programvaran med en plugin. Det är ändå en av de stora fördelarna med fri programvara, man kan stjäla utan dåligt samvete!

Entangle använder sig av gobject-komponentmodellen, som är vanlig i Gnome-världen. Photobox-pluginen är implementerad i Python, medans resten av Entangles kodbas i allmänhet är programmerad i C.

Python är ett bekvämt språk i många avseenden, men om du föredrar något annat så har många språk stöd för gobjekt-introspektion, vilket är det som krävs för att skapa de objekt som används för att konversera med Entangles kärna.

Entangle har valt att använda libpeas för att definiera sina plugins, se https://wiki.gnome.org/Projects/Libpeas

Snabbaste vägen till framgång i det här fallet är att helt enkelt ändra photobox.py så att den gör något annat när du aktiverar photobox än det ursprungligen avsedda. Om man vill experimentera med detta kan man modifiera metoden def do_capture(self, src). I originalutformningen anropar den Entanglekärnan för att ta själva bilden.

Darktable

Darktable är en fotohanterare för Linux med många intressanta egenskaper, som också använder sig av gphoto2 för att kommunicera med kameror. På samma sätt som Entangle kan Darktable användas för att fjärrstyra en kamera, även om syftet i första hand är att hantera bildbibliotek.

Darktable är att föredra som bas för din tillämpning om du har mer avancerade krav på bildbehandling och arkivering.

Qstopmotion

qstopmotion är som namnet antyder en enkel applikation för att skapa stopmotionfilmer på Linux. Qstopmotion kan använda sig både av gphoto och v4l, vilket betyder att utöver systemkameror fungerar även webkameror.

Fördelen med att använda en systemkamera för denna typ av teknisk fotografering blir tydlig när man väl provar att använda en webkamera för fotograferingen. En webkamera har normalt sett väldigt få inställningar, och sköter det mesta av ljusinställningar och annat automatiskt. Det är bra i ett videosamtal, men mindre bra när man eftersträvar illusioner av rörelse. Det är distraherande när ljusförhållanden ändrar sig från bild till bild i en film. På en systemkamera har man mycket större kontroll och kvalitén på bilderna blir naturligtvis bättre.

Avslutning

En bild säger som sagt mer än tusen ord, och om du är intresserad av tillämpningar runt bilder har du säkert mer än tusen idéer vad du skulle kunna göra med din kamera och en dator.

Vi hoppas att den här artikeln har kunnat ge dig en del teknisk inspiration för att komma igång, och ser fram emot att se dina alster på nätet!