2013-02-16 12 views
7

prega Sto cercando un lavoro in giro per ottenere l'accesso fotocamera Android attraverso kivy, o una libreria che posso integrarsi con kivy al fine di accedere alla telecamera.Accesso Android telecamera attraverso Kivy

Sto sviluppando un'applicazione per Android, ma utilizzando python-kivy per l'interfaccia utente,

nulla sarà molto apprezzato,

grazie mille.

risposta

2

Kivy ha un supporto nativo per chiamare la telecamera. Controlla this page from the new programming guide per un provider principale o this page from the new programming guide per un widget uix. In teoria, il core dovrebbe essere in grado di adattarsi tra le piattaforme e il widget dovrebbe quindi essere in grado di utilizzare la telecamera.

+3

La fotocamera kivy non funziona con la fotocamera Android. Ho provato ad avviare la fotocamera un sacco di tempo su un dispositivo Android, ma ho sempre fallito, ma funziona perfettamente su un ambiente desktop. – Plaix

1

This collegamenti a una discizione in cui è possibile trovare un'implementazione personalizzata. Si basa sul wrapping automatico di PyJNIus della classe Camera dell'API Android. Non mi sono provato ma puoi provarlo ...

5

Ecco il mio codice di esempio, che funziona su Android. Basta importare quel file https://github.com/kivy/plyer/blob/master/plyer/platforms/android/camera.py Inoltre, non dimenticare di aggiungere le autorizzazioni CAMERA per manifest.

main.py:

__version__ = '1.0' 

import kivy 

# importing file from https://github.com/kivy/plyer/blob/master/plyer/platforms/android/camera.py 
# I downloaded it and saved it in the same directory: 
from camera import AndroidCamera 

from kivy.app import App 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 
from kivy.properties import ObjectProperty, StringProperty 

import base64 

class MyCamera(AndroidCamera): 
    pass 

class BoxLayoutW(BoxLayout): 
    my_camera = ObjectProperty(None) 
    # /sdcard means internal mobile storage for that case: 
    image_path = StringProperty('/sdcard/my_test_photo.png') 

    def __init__(self, **kwargs): 

     super(BoxLayoutW, self).__init__() 

     self.my_camera = MyCamera() 

    def take_shot(self): 
     self.my_camera._take_picture(self.on_success_shot, self.image_path) 

    def on_success_shot(self, loaded_image_path): 
     # converting saved image to a base64 string: 
     image_str = self.image_convert_base64 
     return True 

    #converting image to a base64, if you want to send it, for example, via POST: 
    def image_convert_base64(self): 
     with open(self.image_path, "rb") as image_file: 
      encoded_string = base64.b64encode(image_file.read()) 
     if not encoded_string: 
      encoded_string = '' 
     return encoded_string 

if __name__ == '__main__': 

    class CameraApp(App): 
     def build(self): 
      main_window = BoxLayoutW() 
      return main_window 

    CameraApp().run() 

camera.kv:

<BoxLayoutW>: 

    Button: 
     text: 'shot' 
     on_release: root.take_shot() 
+0

@Suzana_K & megastruktur: ho usato il codice e funziona bene salvando la foto su/sdcard (avvia l'interfaccia nativa per Android) ma dopo lo scatto l'app si chiude/non torna alla schermata dell'app per uso della foto.Sto usando Kivy Launcher solo per ora. Potete aiutare con questo? – simplynail

0

quanto è stato difficile per me trovare la risposta come usare macchina fotografica su Android ho pensato io condividere il mio viaggio alla risposta per salvare il tempo della prossima persona.

non riuscivo a trovare il modo di far funzionare classe Camera retta dalla Kivy:

https://kivy.org/docs/examples/gen__camera__main__py.html

finalmente ho trovato la soluzione postato sopra, e dopo aver sprecato qualche tempo la sua attuazione nella mia app si è scoperto è stato impossibile per me tornare all'app dopo aver scattato una foto: l'app è stata chiusa, quindi non sono riuscito a tornare all'app per utilizzare l'immagine (stavo usando Kivy Launcher). Proprio di recente ho scoperto questo modo di accedere fotocamera è stata abbandonata (https://github.com/kivy/plyer/issues/16#issuecomment-54094174)

Ma poi ho trovato la soluzione qui di seguito e solo in esecuzione il codice di esempio sembra che sarò in grado di ottenere risultati che voglio (ha solo bisogno un piccolo ritocco a non cadere quando la fotocamera Android si cancella/nessuna foto è stata scattata)

https://github.com/kivy/kivy/tree/master/examples/android/takepicture

EDIT: appare la mia applicazione è stata terminata perché non ha attuato on_pause: return True nel widget di più in alto. Tuttavia il testo sopra potrebbe essere ancora utile