Googles CameraX API låter appar använda de bästa vanliga kamerafunktionerna

Googles API för CameraX-leverantörstillägg gör det möjligt för kameraappar från tredje part att använda några av de bästa funktionerna i standardkameraappen.

Det finns ett långvarigt skämt på Internet som du kan se om någon använder en Android-telefon dålig kvalitet på deras selfies. Även om memen definitivt överdriver ganska mycket, finns det tyvärr lite sanning bakom dem. Android-telefoner har vanligtvis legat före iPhones när det gäller kameraprestanda, åtminstone på pappret. OEM-tillverkare som LG och Samsung tenderar att använda kameror med fler pixlar och större bländare än konkurrerande iPhones. Specifikationer är dock inte allt. En del av varför Apple kan tävla i kameraspelet är på grund av iOS mjukvara. Alla OEM-tillverkare, från Apple till ZTE, använder lite mjukvarumagi för att få foton och videor att se bättre ut. Företagen använder algoritmer för att minska brus, justera färgmättnad och kontrast, och till och med förgylla mörka scener, allt för att göra slutresultaten mer tilltalande. Det är, historiskt sett, där Android OEM: er har fallit sämre än Apple.

Mjukvaruutveckling

På senare tid har dock saker och ting börjat förändras. Det största exemplet på denna förändring är förmodligen Google och Pixel-serien. När det gäller hårdvara kan Pixel-kamerorna verkligen inte jämföras med andra flaggskepp. Det är dock programvara som Google gör skillnaden. Med funktioner som Porträttläge, Night Sight, HDR+ och Super Res Zoom har pixlarna fått ett rykte om sig att ha några av bästa smartphonekamerorna på marknaden.

Andra Android OEM-tillverkare följer Googles ledning. Samsung, OPPO, Xiaomi, Vivo, OnePlus, etc, har alla introducerat sina egna versioner av Pixels mer populära kamerafunktioner, och de har till och med några egna unika funktioner. Med modeord som "AI" och "maskininlärning" försöker Android OEM-tillverkare övertyga dig om att deras programvara är den programvara du vill förbättra dina foton och videor. Vi har kommit till en punkt där Android-telefoner verkligen kan tävla mot iPhones i alla aspekter av kameraprestanda.

Problemet

Tyvärr finns det fortfarande ett stort undantag: appar från tredje part. Ditt super-duper 50-kamera flaggskepp kan ta fantastiska bilder med den inbyggda kameraappen, men byt till Instagram, Snapchat, eller till och med en kameraapp från tredje part, och det är i grunden en garanti för att det du fångar inte kommer att se nästan lika ut Bra. Som om det inte vore nog går du också miste om alla coola kamerafunktioner och lägen. Detta beror på att Android, till skillnad från iOS, inte riktigt har ett enhetligt kameraramverk. Visst, de grundläggande funktionerna finns där. En app från tredje part kan fortfarande ta foton och filma och använda blixten. Men vad händer om din telefon har en sekundär sensor för vidvinkel eller tele? Det är möjligt att utvecklare kommer att kunna komma åt den andra sensorn, men metoden de använder måste vara specifik för din enhet.

Säg att du har en LG V40 (jag vet, jag vet, tänk dig att du har det). V40 har tre sensorer: standard, telefoto och ultrawide. Den inbyggda kameraappen har inga problem att växla mellan alla dessa olika sensorer. Men glöm bort att använda den ultravida sensorn på Instagram. Nu kan Instagram ta en titt på hur LG: s kameraapp använder de olika sensorerna och utveckla ett sätt för användare att ta vidvinkel- eller zoombilder. Men det skulle förmodligen bara fungera på LG V40. Även om Galaxy S10 har samma tre sensorlägen (standard, telefoto och ultrawide), skulle Instagram-teamet behöva utveckla en annan metod för Samsung.

Lägg nu till Huawei, Vivo, OnePlus, Xiaomi, OPPO, Nokia, ZTE, HTC och vilket annat märke du kan tänka dig till mixen. Som du kan föreställa dig skulle det bli otroligt tråkigt att försöka utveckla en metod för att komma åt de potentiella extra sensorerna för varje telefon från varje märke. Och då måste du behålla kompatibiliteten med alla nuvarande och nya telefoner.

Dessa begränsningar gäller även kamerafunktioner. Saker som porträttläge, nattsyn och HDR+ behöver antingen specifika metoder per enhet att använda eller är helt otillgängliga för appar från tredje part.

Uppenbarligen, för en app som Instagram är detta inte en alltför stor sak. Det är inte deras fokus, och du kan alltid använda telefonens kameraapp för att ta bilden först. Men hur är det med dedikerade kameraappar?

Effekterna

Öppna Google Play Butik och sök efter "kamera". Du kommer att hitta hundratals resultat. Även med förbättringarna i förstaparts kameramjukvara är kameraappar från tredje part fortfarande mycket populära. Vissa syftar till att tillhandahålla mer tekniska funktioner som manuell exponering och fokus (funktioner som din telefons kameraapp kanske inte har). Andra strävar efter att ge en konsekvent UX över dina enheter.

Speciellt av den senare anledningen kan Androids kamerafragmentering göra det otroligt svårt att utveckla och underhålla en allmänt kompatibel kameraapp. Om du vill tillhandahålla extra funktioner, hur ska du inkludera alla potentiella funktioner i alla potentiella förstapartsappar? Om du letar efter en konsekvent upplevelse, hur kan du realistiskt garantera att åtkomst till vidvinkelsensorn på varje enhet som har den kommer att fungera?

Svaret är: du kan inte. Du kan försöka stödja så många funktioner på så många enheter som möjligt, men i slutändan kommer det att bli mycket arbete för relativt lite belöning. Det är inte svårt att föreställa sig att åtminstone ett fåtal utvecklare helt enkelt har gett upp på att göra en fullt utrustad kameraapp för Android. Det har faktiskt flera.

Förlusterna

Gå och gör en sökning efter kameraappar i Play Butik. Du kommer att märka några saker. En, det finns en massa av alternativ. Två, de flesta av dem gör ganska liknande saker (tillämpa filter i efterhand och så). Tre, de mer avancerade alternativen uppdateras förmodligen inte så ofta. Du kan till och med hitta resultat på Google som inte längre finns i butiken.

Nyligen har vi fått ett ganska stort exempel på att någon säger upp det. Moment bestämde sig för att upphöra med utvecklingen av sin Pro Camera-app för Android.

Moments Pro Camera-app syftade till att ge avancerade foto- och videofunktioner till Android. Det här är bara några av dessa funktioner:

  • RGB-histogram
  • Dela fokus
  • Manuell kontroll över exponering, ISO, slutartid, vitbalans
  • Fokus toppar
  • RAW-fångst
  • Dynamiska förändringar i bildhastighet och upplösning
Moment Pro Camera skärmdumpar. Via: 9to5Google

Problemet är att många av dessa funktioner helt enkelt inte fungerar på många enheter. Att titta på Moments funktionskompatibilitetslista är som att titta på en bild av ett dansgolv. Även inom samma produktlinje är funktionsstödet otroligt fragmenterat. Efter två års utveckling har Moment inte längre kapacitet att fortsätta utveckla sin app.

Grön = stöds av Moment Pro Camera. Gul = stöds av enheten men inte min Moment Pro Camera. Röd = stöds inte av enheten. Bildkälla: Moment. Hämtad via: 9to5Google.

Lösningen?

Det har gått nästan 12 år sedan Android släpptes för första gången, men vi kanske äntligen har en lösning på kamerafragmenteringen.

Denna lösning kommer direkt från Google, även om den inte är inbyggd direkt i Android. Istället är det en Jetpack-stödbibliotek. Om du är bekant med att utveckla Android-appar har du förmodligen stött på AppCompat och AndroidX supportbibliotekssviter. Dessa bibliotek från Google syftar till att göra det lättare för utvecklare att upprätthålla bakåtkompatibilitet med äldre Android-versioner, samtidigt som de kan introducera nya funktioner och stilar.

Ett nyare tillägg till Jetpack (typ) är CameraX-biblioteket. I likhet med andra Jetpack-bibliotek är CameraX mål att göra kamerautveckling enklare. I sin mest grundläggande form omsluter CameraX Androids Kamera 2, ett API som tillåter appar att undersöka kamerafunktionerna på en enhet, förutsatt att OEM exponerar dessa kamerafunktioner för API: et. Användare kan kontrollera vilka kamerafunktioner som exponeras för Camera2 API med Camera2 API Probe-applikationen och sedan jämföra det med funktionerna som är tillgängliga i standardkameraapplikationen.

Camera2 API-sondUtvecklare: March Media Lab

Pris: Gratis.

4.2.

Ladda ner

Fördelen med att använda CameraX som ett omslag för Camera2 API är att det internt löser alla enhetsspecifika kompatibilitetsproblem som kan uppstå. Bara detta kommer att vara användbart för utvecklare av kameraappar eftersom det kan minska koden och den tid som ägnas åt att undersöka kameraproblem. Det är dock inte allt som CameraX kan göra.

Även om den första delen för det mesta bara är intressant för utvecklare, finns det en annan del som gäller både utvecklare och slutanvändare: Leverantörstillägg. Detta är Googles svar på kamerafunktionsfragmenteringen på Android. Enhetstillverkare kan välja att skicka tilläggsbibliotek med sina telefoner som tillåter CameraX (och utvecklare och användare) att utnyttja inbyggda kamerafunktioner. Säg till exempel att du verkligen gillar Samsungs Portrait Mode-effekt, men att du inte gillar själva kameraappen. Om Samsung bestämmer sig för att implementera en CameraX Portrait Mode-tillägg i sina telefoner, kommer alla tredjepartsappar som använder CameraX att kunna använda Samsungs Portrait Mode. Uppenbarligen är detta inte bara begränsat till den ena funktionen. Tillverkare kan teoretiskt sett öppna alla sina kamerafunktioner för appar som använder CameraX.

Tyvärr finns det en varning, som jag nämnde tidigare: detta är inte ett krav för tillverkare. säger Google de kommer att stödja tillägg på alla nya och kommande Pixel-enheter, från och med Pixel 4. säger OPPO de har öppnat sina skönhets- och HDR-lägen. Andra OEM-tillverkare kan välja att bara göra sina nattlägen tillgängliga för CameraX, eller så kan de välja att inte implementera några tillägg alls. Det är helt upp till tillverkaren vilken enhet som stöder vilka CameraX-tillägg (om några). Google används för att upprätthålla en lista över enheter som stöder leverantörstillägg och vilka kamerafunktioner de har öppnat, men de har inte uppdaterat listan under de senaste månaderna. Vi kontaktade Google för några veckor sedan och frågade dem om de kunde tillhandahålla en uppdaterad lista, men företaget har ännu inte svarat med en lista. För vad det är värt, a senaste Google-blogginlägget anger att enheter från Samsung, LG, OPPO, Xiaomi och Motorola (på Android 10) ger en viss förlängning funktioner, men blogginlägget anger inte exakt vilka enheter som stöds eller vilka funktioner de har förse.

Om tillräckligt många tillverkare bestämmer sig för att implementera tillägg kommer Androids kamerascen från tredje part att bli mycket ljusare. Utvecklare behöver inte slösa tid på att återimplementera en kamerafunktion för varje enhet de kan, eftersom CameraX ramverk kommer att ta hand om det. Det kommer att bli mindre funktionsfragmentering eftersom liknande funktioner över enheter kommer att vara tillgängliga via ett gemensamt gränssnitt. Och det finns många fler möjligheter.


Naturligtvis beror allt detta på Googles förmåga att övertyga tillverkare att implementera CameraX Vendor Extension-bibliotek framöver. Om inte CameraX är allmänt implementerat, kommer det bara att lägga till den nuvarande fragmenteringen. Personligen är jag dock hoppfull. Google kan vara mycket övertygande när det vill vara det, och det verkar som att det ligger mycket arbete på CameraX. Det är spännande att se en möjlig lösning på Androids kameraproblem vid horisonten, och jag ser fram emot att se hur CameraX kommer att förbättras och expandera med tiden.

Vad tycker du om CameraX? Kommer Google att lyckas skapa en enhetlig kameraupplevelse för Android?