Documente Academic
Documente Profesional
Documente Cultură
de imagens ao vivo
Alessandro de Oliveira Faria (A.K.A.CABELO)
cabelo@opensuse.org
Perfil Técnico:
Alessandro de Oliveira Faria (A.K.A. CABELO)
Diretor de pesquisas
NETi TECNOLOGIA
●
Atuando no mercado de software desde 1986
●
openSUSE Member;
●
Membro da comunidade Viva O Linux;
●
Conselheiro Administrativo Linux do projeto Tecnociência;
Mantenedor e Desenvolvedor
●
droidFrete: Cálculo de frete na plataforma Android.
●
droidRastreamento: Rastreabilidade de objeto postados.
●
stampDate: Serviço de menu KDE para estampar data em imagens.
●
libHAIRCAPTURE: Biblioteca de video captura em Linux.
●
IPCMSG: Biblioteca de comunicação interprocessos.
●
easyPCSC: Biblioteca para utilização de cartões sma
Publicações:
●
Linux Magazine 8 Artigos
●
Internet 94 artigos técnicos (VOL/Tecnociência/Linha de Código).
Arquitetura
O Dalvik é uma máquina virtual performática
Processamento de imagem
Onde utilizar o NDK?
Instalação e configuração do SDK
Download e descompactação do SDK
Pagina principal:
http://developer.android.com/sdk/index.html
$ tar zxvf androidsdk_r04linux_86.tgz
$ cd androidsdklinux_86/tools
$ ./android
$ export PATH=${PATH}:<pasta de instalação do
android>/tools
Instalação e configuração do SDK
Configuração da maquina virtual
Instalação e configuração do SDK
Instalação do eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Instalação e configuração do SDK
Configuração do Eclipse
Criando o primeiro Ola Mundo
Imprimir ola mundo
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Ola Mundo, Viva Pitágoras!");
setContentView(tv);
}
}
Criando o primeiro Ola Mundo
Executando o programa
Instalação e configuração do NDK
Download e descompactação do NDK
Pagina principal:
http://developer.android.com/sdk/ndk/index.html
$ unzip androidndkr4blinuxx86.zip
$ cd ~/workspace/HelloNDK
$ javah o hellondk.h classpath bin com.cabelo.hellondk.HelloNDK
$ mkdir jni
$ cp hellondk.h jni/
$ cd jni
$ vi Android.mk
LOCAL_PATH := $(call mydir)
include $(CLEAR_VARS)
LOCAL_DEFAULT_CPP_EXTENSION := cpp
LOCAL_MODULE := hellondk
LOCAL_SRC_FILES := hellondk.cpp
include $(BUILD_SHARED_LIBRARY)
Instalação e configuração do NDK
Criação da função nativa
$ vi hellondk.cpp
#include <hellondk.h>
JNIEXPORT jstring JNICALL
Java_net_bruary_hellondk_HelloNDK_sayHello(JNIEnv *env, jobject obj){
return env>NewStringUTF("Hello, NDK!");
}
Instalação e configuração do NDK
Criação protótipo da função nativa e makefile.
$ /usr/local/share/androidndkr4b/ndkbuild
Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
SharedLibrary : libhellondk.so
Install : libhellondk.so => ~/HelloNDK/libs/armeabi
$ vi Application.mk
APP_ABI := armeabi armeabiv7a
$ /usr/local/share/androidndkr4b/ndkbuild
Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
SharedLibrary : libhellondk.so
Install : libhellondk.so => ~/HelloNDK/libs/armeabi
Compile++ thumb: hellondk <= ~/HelloNDK/jni/hellondk.cpp
SharedLibrary : libhellondk.so
Install : libhellondk.so => ~/HelloNDK/libs/armeabiv7a
Instalação e configuração do NDK
Execução do programa
Aplicações de video captura
Permissão de uso da CAMERA.
Aplicações de video captura
Inicialização e propriedades.
<SurfaceView android:id="@+id/surface"
android:layout_width="fill_parent" android:layout_height="10dip"
android:layout_weight="1">
</SurfaceView>
import android.hardware.Camera;
Camera camera = Camera.open();
camera.release();
Camera.Parameters p = mCamera.getParameters();
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(w, h);
mCamera.setParameters(p);
Aplicações de video captura
Preview e captura
camera.startPreview();
[ … ]
camera.stopPreview();
private void takePicture() {
camera.takePicture(shutterCallback, rawCallback, jpegCallback); }
ShutterCallback shutterCallback = new ShutterCallback() {
public void onShutter() {
[ … ] } };
PictureCallback rawCallback = new PictureCallback() {
public void onPictureTaken(byte[] _data, Camera _camera) {
[ … ] } };
Aplicações de video captura
Gravação em disco
PictureCallback jpegCallback = new PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
FileOutputStream outStream = null;
nomeImagem = String.format("/sdcard/DCIM/Camera/img%d.jpg",
System.currentTimeMillis());
outStream = new FileOutputStream(nomeImagem);
outStream.write(data);
outStream.close();
}
};
Processando imagem
http://code.google.com/p/android-playground-erdao/wiki/SnapFace
Processamento em tempo real
Preview e captura
void
Java_com_erdao_SnapFace_PreviewView_grayToRgb( JNIEnv* env,
jobject this,
jbyteArray src,
jintArray dst )
{
jboolean b;
jint len;
jbyte* srcPtr=(*env)>GetByteArrayElements(env,src,&b);
jint* dstPtr=(*env)>GetIntArrayElements(env,dst,&b);
len = (*env)>GetArrayLength(env,src);
gray8toRGB32(srcPtr, dstPtr, len);
(*env)>ReleaseByteArrayElements(env, src, srcPtr, 0);
(*env)>ReleaseIntArrayElements(env, dst, dstPtr, 0);
}
;
Críticas e sugestões
cabelo@opensuse.org
Obrigado!
http://cabelovivaolinux.wordpress.com
“Colaborar atrai amigos, competir atrai
inimigos...”