THETAV를 사용하여 Tensorflow 작업
16273 단어 AndroidTHETAPluginJava
개시하다
Tensorflow에는 안드로이드견본가 있고 아래 사이트에서도 소개되어 있다.
https://qiita.com/icchi_h/items/a1df9f27569714edfc5e
여기에는 안드로이드를 탑재한 온종일 카메라 THETAV로 텐소플로우 동작을 한다.
(2018/8/18: 앞뒤 문장을 합쳐서 보충한다.여기.에는 2018/10/20 활동의 해설자료(PPT)가 있다.)
개발 환경
절차.
소스 코드 가져오기(Tensorflow, PluginsDK)
github에서 tensorflow 원본 코드를 준비합니다.여기 있다
https://github.com/tensorflow/tensorflow (제출:26353f9b5109122e 7097143aee 9c2d05e 2011 fd) 포크 후 파일 배치https://github.com/mktshhr/tensorflow-theta를THETAV에 업데이트합니다.태그 "Qita 20180818"은 본 기사에 해당하는 소스 코드입니다.여기서 https://github.com/mktshhr/tensorflow-theta/tree/Qiita20180818/tensorflow/examples/android는 변경 범위다.
원본 코드를 가져오면 안드로이드 스튜디오에서 tensorflow-theta/examples/android를 열고 테스트할 수 있습니다.다음 설명의 변경 사항이 적용되었습니다.git clone https://github.com/mktshhr/tensorflow-theta.git
cd ./tensorflow-theta/examples/android
Android Studio에서 열기
안드로이드 폴더를 Android Studio로 엽니다.
"Add Google Maven repository 및 and sync 프로젝트"를 클릭한 후 화면을 따라갑니다.
build.gradle의 45줄을 "bazel"에서 "none"으로 고칩니다.// set to 'bazel', 'cmake', 'makefile', 'none'
def nativeBuildSystem = 'none'
같은build입니다.gradle의 194번째 줄을 "comple"에서 "implementation"으로 변경합니다.dependencies {
if (nativeBuildSystem == 'cmake' || nativeBuildSystem == 'none') {
implementation 'org.tensorflow:tensorflow-android:+'
}
}
SyncNow로 업데이트됩니다.
안드로이드 스마트폰으로 이동
이때까지 변경된 사항은 안드로이드 스마트폰(Moto G5 Plus, 안드로이드 7.0)에서 실행된다.
'Run'-'Debug'Tensorflow 안드로이드'를 선택해 구축하고 안드로이드 스마트폰으로 조작할 수 있다.(THETAV의 경우 카메라가 피피피피피피라고 불리며 꺼진다.)
텐소플라우 데모는 TF 클래식, TF 디텍트, TF 스타일리즈, TF 스피치 4개 활동(적용)으로 구성됐다.
git clone https://github.com/mktshhr/tensorflow-theta.git
cd ./tensorflow-theta/examples/android
// set to 'bazel', 'cmake', 'makefile', 'none'
def nativeBuildSystem = 'none'
dependencies {
if (nativeBuildSystem == 'cmake' || nativeBuildSystem == 'none') {
implementation 'org.tensorflow:tensorflow-android:+'
}
}
THETAV용 변경 사항
Camera 공통 섹션 수정(TF Classify, TF Detect, TF Stylize)
@Override
protected void onCreate(final Bundle savedInstanceState) {
LOGGER.d("onCreate " + this);
sendBroadcast(new Intent("com.theta360.plugin.ACTION_MAIN_CAMERA_CLOSE"));
super.onCreate(null);
구축을 위해 아래도 Camera Activity입니다.자바 파일의 시작에 보충합니다.import android.content.Intent;
124행 근처의 onPreviewSizeChosen 매개변수를 수정합니다.회전이 없습니다.onPreviewSizeChosen(new Size(previewSize.width, previewSize.height), 0);
//camera.setDisplayOrientation(90);
parameters.set("RIC_SHOOTING_MODE", "RicMoviePreview1024");
109행은 다음과 같다.폭과 높이를 바꾸다. camera.addCallbackBuffer(new byte[ImageUtils.getYUVByteSize(s.width, s.height)]);
textureView.setAspectRatio(s.width, s.height);
이상의 변경을 통해 Vysor에서 TF Classify, TF Detect의 동작을 확인할 수 있습니다.세로 이미지로 표시돼 수정됐지만, 안드로이드 스마트폰(MotoG5 Plus)에서는 새로운 카메라2 API를, THETA에서는 전통적인 카메라API를 사용하기 때문에 스마트폰과 THETA에서는 동작이 다를 수 있다.
TFT Detect 기본 오브젝트 감지OD_API(Tensorflow Object Detection API)가 사용됩니다.
TF Stylize 수정
이미지를 1:1 정사각형으로 설정하고 Style을 적용한 다음 2:1 정거리 원통 이미지로 수정합니다.
@Override
protected void processImage() {
if (desiredSize != initializedSize) {
LOGGER.i(
"Initializing at size preview size %dx%d, stylize size %d",
previewWidth, previewHeight, desiredSize);
rgbFrameBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
croppedBitmap = Bitmap.createBitmap(desiredSize, desiredSize, Config.ARGB_8888);
frameToCropTransform = ImageUtils.getTransformationMatrix(
previewWidth, previewHeight,
desiredSize, desiredSize,
sensorOrientation, false);
runInBackground(
new Runnable() {
@Override
public void run() {
cropCopyBitmap = Bitmap.createBitmap(croppedBitmap);
final long startTime = SystemClock.uptimeMillis();
stylizeImage(croppedBitmap);
lastProcessingTimeMs = SystemClock.uptimeMillis() - startTime;
textureCopyBitmap = Bitmap.createBitmap(previewWidth, previewHeight, Config.ARGB_8888);
final Paint paint = new Paint();
paint.setFilterBitmap(true);
final Canvas canvas = new Canvas(textureCopyBitmap);
canvas.drawBitmap(croppedBitmap, cropToFrameTransform, paint);
if (SAVE_PREVIEW_BITMAP) {
ImageUtils.saveBitmap(textureCopyBitmap, "stylizeImage.png");
}
requestRender();
readyForNextImage();
}
});
TF Stylize가 실행됩니다.TF 스피치 수정
@Override
protected void onCreate(Bundle savedInstanceState) {
// Set up the UI.
super.onCreate(savedInstanceState);
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // for THETA
am.setParameters("RicUseBFormat=false"); // for THETA
setContentView(R.layout.activity_speech);
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
이상의 변경으로 스마트폰처럼 소리를 인식할 수 있게 됐다.총결산
Tensorflow의 안드로이드 샘플을 THETA에서 움직이게 하고 이미지 인식과 음성 인식을 했다.TF 클래시피는 물체의 식별기이지만 전천구 이미지에서 초광각이어서 물체를 오판하기 쉽다.TF Detect는 이미지 내 물체를 찾는 물체 탐지기다.TFStylize가 2:1 이미지 응용 스타일을 잘 적용하지 못하기 때문에 잠시 1:1 이미지 응용 스타일로 회피했습니다.TF Speech는 MODIFY입니다.AUDIO_SETTINGS 권한 등을 추가하여 작업할 수 있습니다.전천구를 향한 인식 정밀도 향상 등 방법의 여지는 아직 많다.
키 Te n sorFlow Inference Interface 클래스는 assets에서 학습된 모델(Protocol Buffers(.pb) 형식의 파일)을 매개변수로 사용합니다.같은 설정과 읽기를 통해 다양한 학습 모델을 시도할 수 있다.
참고 자료
https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html
https://api.ricoh/docs/theta-plugin-reference/camera-api/
http://iti.hatenablog.jp/entry/2017/05/25/093328
Reference
이 문제에 관하여(THETAV를 사용하여 Tensorflow 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mktshhr/items/670b6320a2f6923fd19c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
https://codelabs.developers.google.com/codelabs/tensorflow-style-transfer-android/index.html
https://api.ricoh/docs/theta-plugin-reference/camera-api/
http://iti.hatenablog.jp/entry/2017/05/25/093328
Reference
이 문제에 관하여(THETAV를 사용하여 Tensorflow 작업), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mktshhr/items/670b6320a2f6923fd19c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)