Android Meets TensorFlow: How to Accelerate Your App with AI (Google I/O ’17)

[음악 재생] KAZ SATO : 고맙습니다 우리 세션에 참석해 주셔서 감사합니다

"Android Meets TensorFlow " 저는 사토 카즈입니다 저는 Google Cloud Platform 팀의 개발자 대행사입니다 과– HAK MATSUDA : 안녕하세요 좋은 아침

아주 이른 아침에와 주셔서 감사합니다 나는 아침에 사람이 아니기 때문에 나는 조금 졸려있다 어쨌든, 제 이름은 마츠다 하쿠로입니다 나는 안드로이드 게임 개발자 옹호자이다 및 고유 기술

KAZ SATO : 그래서 오늘,이 세션에서, 우리는이 주제들에 대해 토론하고 싶습니다 그래서 이번 세션의 첫 번째 부분은, 나는 AI, 기계 학습, 신경 네트워크, 깊은 학습, Google이 이러한 종류의 기술을 어떻게 사용하고 있는지 우리의 서비스를 구현합니다 그리고 TensorFlow는 무엇입니까? 그것은 건물을위한 오픈 소스 라이브러리입니다 너 자신의 신경망 그리고 나는 Hak에 그 무대를 전달할 것이다

그는 당신이 안드로이드를 어떻게 구축 할 수 있는지 논의 할 것입니다 TensorFlow에서 제공하는 애플리케이션 최적화 방법 마지막으로 미리보기를하고 싶습니다 TensorFlow Lite 및 Android와 같은 새로운 기술 신경 네트워크 API 그렇다면 기계 학습과 신경망은 무엇입니까? 얼마나 많은 사람들이 실제로 신경 네트워크를 시도 했습니까? 몇 명? 오, 너무 많은 사람들! 20 %처럼? 실제로 얼마나 많은 사람들이 신경망을 실제로 사용 했습니까? 모바일 장치에서? 매우 감사합니다 나는 10 명의 사람들을 발견했다

오늘은 TensorFlow를 사용하는 방법을 배우고 싶습니다 기계 학습 모듈 실행 내부 모바일 애플리케이션 너무 많은 유행어가있었습니다 인공 지능, 기계 학습, 신경 네트워크, 또는 깊은 학습 우리는 그 유행어에 대해 들었습니다

지난 몇 년간 차이점이 뭐야? 인공 지능이나 인공 지능 – 당신은 건물과 같은 똑똑한 것을 만들기위한 과학입니다 자율 주행 차 또는 아름다운 그림을 그리거나 음악을 작곡하는 컴퓨터 AI의 비전을 실현하는 한 가지 방법 기계 학습에 있습니다 기계 학습은 당신은 컴퓨터가 스스로 훈련하는 것을 허용 할 수 있습니다 모든 단계를 지시하는 인간 프로그래머, 자체적으로 데이터를 처리합니다

그리고 기계 학습에서 많은 다른 알고리즘 중 하나 신경 네트워크입니다 그리고 2012 년 이래로 우리는 큰 돌파구를 보았습니다 신경 네트워크의 세계에서, 특히 이미지 인식, 음성 인식, 또는 자연어 처리 및 기타 여러 응용 프로그램에 사용할 수 있습니다 그리고 Google에서 우리는 몇 년 동안 신경 네트워크 기술을 개발했다 그렇다면 신경 네트워크 란 무엇입니까? 수학의 함수처럼 생각할 수 있습니다

또는 프로그래밍 언어의 함수 따라서 모든 종류의 데이터를 입력으로 넣을 수 있습니다 일부 행렬 연산 또는 계산 수행 신경 네트워크 내부 그런 다음, 결과적으로 출력 벡터를 얻을 수 있습니다 많은 레이블이나 추측 값을 가지고있다

예를 들어 이미지가 많은 경우, 당신은 분류하기 위해 신경 네트워크를 훈련시킬 수 있습니다 어느 것이 고양이의 이미지인지 또는 개 이미지인지 그리고 이것은 사용의 한 예일뿐입니다 신경 네트워크의 경우 기술을 적용하여 모든 종류의 비즈니스를 해결할 수 있습니다

문제가 있습니다 예를 들어, 게임 서버가 많은 경우, 다음 모든 사용자 활동을 변환 할 수 있습니다, 플레이어 활동, 숫자의 무리로 그들을 변환, 벡터와 같은 신경망을 학습하고 신경 네트워크를 훈련 시키십시오 게임 서버의 플레이어 유형을 분류합니다 예를 들어, 어떤 치욕적 인 플레이어를 찾고 싶다면 자동화 된 스크립트를 사용하여 귀하의 서버에서 속이려고하거나 프리미엄 플레이어를 찾기 위해 신경망을 사용할 수 있습니다 게임 서버에서 점점 더 많은 아이템을 구입할 수 있습니다

그래서 이것은 하나의 가능한 예일뿐입니다 가능한 수천 가지 응용 프로그램 중 Google은 심층 학습 기술을 사용해 왔습니다 100 개가 넘는 스마트 기능 구현을위한 Google 검색, Android, Play, 및 많은 다른 응용 프로그램 예를 들어 Google 검색을 매일 사용하는 경우, 즉, 깊은 학습 기술에 액세스하고 있음을 의미합니다 매일 Google에서 제공합니다

2015 년에 RankBrain을 도입 했으므로, 이는 깊은 학습 기반 랭킹 알고리즘 인 정의 및 순위 지정을위한 신호를 생성합니다 검색 결과 모바일 애플리케이션을 살펴 본다면 Google의 예를 들어 Google 포토는 하나입니다 가장 성공적인 모바일 애플리케이션의 분석과 이해를 위해 깊은 학습을 해왔다 스마트 폰이 찍은 각 이미지의 내용, 그래서 직접 태그 나 키워드를 넣을 필요가 없습니다 대신, 당신은 단지 강아지, 당신의 친구의 이름, 또는 결혼식 파티 가이 콘텐츠를 기반으로 이미지를 찾을 수 있습니다

스마트 회신은 회신 옵션을 표시하는 기능입니다 각 이메일 스레드로 그래서 자연 언어 처리를 사용합니다 신경망 모델에 의해 구동 됨 전자 메일 교환의 컨텍스트를 이해하려고 시도합니다 그리고 지금, 응답의 12 % 이상 스마트 회신 기능으로 생성됩니다

이제 컴퓨터로 이메일을 작성했다고 말할 수 있습니다 더 이상 인간이 아닙니다 Google 번역 앱이 최근에 소개되었습니다 새로운 신경 번역 모델 인 품질, 특히 유창함이 향상되었습니다 번역 된 텍스트의 따라서 가능한 많은 유스 케이스가 있습니다

기계 학습 간의 결합 모바일 애플리케이션, 시작 이미지 인식, OCR, 음성 텍스트 텍스트 음성 변환, 번역 및 NLP가 포함됩니다 특히 기계 학습을 적용 할 수 있습니다 모션 감지 또는 GPS와 같은 모바일 전용 애플리케이션 위치 추적 그리고 왜 당신은 당신의 기계를 운영하고 싶습니까? 학습 모델, 신경 네트워크 모바일 애플리케이션 내부의 모델? 기계 학습을 사용함으로써, 상당한 양의 트래픽을 줄일 수 있습니다 그리고 당신은 훨씬 더 빠른 응답을 얻을 수 있습니다

귀하의 클라우드 서비스에서 원시 데이터에서 의미를 추출 할 수 있기 때문입니다 그게 무슨 뜻이야? 예를 들어, 기계 학습을 사용하는 경우 이미지 인식, 가장 쉬운 방법 이를 구현하기 위해서는 모든 원시 이미지 데이터를 보내야합니다 카메라에 의해 서버로 전송됩니다 대신에 기계 학습 모델을 실행하게 할 수 있습니다

귀하의 모바일 응용 프로그램 내부에서 귀하의 모바일 응용 프로그램 각 이미지에 어떤 종류의 물체가 있는지를 인식 할 수 있고, 그래서 당신은 단지 꽃과 같은 라벨을 보낼 수 있습니다 또는 사람의 얼굴을 서버에 보냅니다 트래픽을 1/10 또는 1/100로 줄일 ​​수 있습니다 상당한 양의 트래픽 절감 효과가 있습니다 다른 예는 모션 디텍션 일 수 있습니다

여기서 모든 움직임, 감각 데이터를 수집합니다 – 원본 이미지를 서버로 직접 보내지 않고, 기계 학습 알고리즘을 사용하여 추출 할 수 있습니다 소위 특징 벡터 기능 벡터는 숫자의 무리 일뿐입니다 특성을 나타내는 100 개 또는 1,000 개의 숫자 또는 모션 센서로부터의 모션의 서명 따라서 100 또는 1,000 개의 숫자 만 보낼 수 있습니다

특징 벡터에서 서버로 그리고 빌드의 출발점은 무엇입니까? 기계 학습으로 구동되는 모바일 애플리케이션? 출발점은 TensorFlow, 머신의 오픈 소스 라이브러리 Google의 정보 TensorFlow는 최신 프레임 워크입니다 기계 학습 또는 인공 지능 기반 서비스 개발을위한 개발 Google에 2015 년 11 월에 오픈했습니다 이제 TensorFlow가 가장 인기있는 프레임 워크입니다

신경 네트워크 또는 세계에서 깊은 학습을 구축합니다 TensorFlow로 얻을 수있는 한 가지 이점 개발의 용이성이다 시작하기가 정말 쉽습니다 몇 줄의 파이썬 코드를 작성할 수 있습니다 또는 수십 줄의 파이썬 코드를 사용하여 신경망을 정의하십시오

혼자서 실제로이 기술은 사람들에게 매우 가치가 있습니다 나는 정교한 수학적 지식이 없기 때문에 나를 좋아한다 배경 그래서 신경망에 관한 교과서를 읽기 시작했을 때, 나는 교과서에 많은 수학 방정식을 발견했다

차별 증식, 역 전파, 및 그라디언트 디센트 그리고 저는 모든 것을 혼자서 구현하고 싶지 않았습니다 대신, 이제 TensorFlow를 다운로드 할 수 있습니다 여기서 한 줄의 파이썬 코드를 작성할 수 있습니다 GradientDescentOptimizer와 같습니다

그 한 줄의 코드는 캡슐화 할 수 있습니다 그래디언트 디센트, 역 전파, 또는 구현 된 기타 최신 알고리즘 Google 엔지니어가 그래서 너는 너 자신을 가질 필요가 없다 신경망을 구현하도록 설정된 기술 기술을 처음부터 또한 TensorFlow의 이점 이식성과 확장 성입니다 예를 들어, 기술로 시작한 TensorFlow를 다운로드 할 수 있습니다

Mac 또는 Windows에서만 사용할 수 있습니다 아주 간단한 샘플의 Hello World 종류로 재생할 수 있습니다 그러나 기술에 대해 진지하게 생각하고 있다면 예를 들어 모델을 처음부터 렌더링하려는 경우 고양이의 이미지를 인식하려면 다음을 사용하십시오 GPU 서버 – GPU는 10 배 또는 50 배이기 때문에 CPU 또는 Mac 또는 Windows보다 빠름 – 모델 훈련 하지만 Google 어스와 같은 많은 대기업 또는 다른 모든 기업에서 클라우드에서 수십 또는 수백 개의 GPU 실행 컴퓨팅 파워가 가장 크기 때문에 깊은 학습 기술에 대한 도전

하지만 여전히 큰 변화는 필요 없습니다 귀하의 TensorFlow 신경망에, TensorFlow는 확장 가능하도록 설계 되었기 때문에 따라서 일단 신경 네트워크를 정의하면, 너는 그것을 배우고, 훈련하고, 사용할 수있다 단일 CPU 또는 다중 GPU에서, 또는 수백 개의 GPU 또는 TPU 또는 Tensor 처리 장치, Google에서 설계 한 ASIC 또는 맞춤형 ADSI입니다 그리고 일단 모델 교육을 마치면, 당신은 모델을 복사 할 수 있습니다 예를 들어, 이미지 인식을 위해, 단일 모델은 100 메가 바이트 데이터, 매개 변수

이러한 매개 변수를 모바일 장치에 복사 할 수 있습니다 Android, iOS 또는 Raspberry Pi와 같은 그리고 TensorFloworg 웹 사이트에 가면, 당신은 임베디드 시스템을위한 샘플 코드를 찾을 수있다 및 휴대 전화 그런 다음 TensorFlow에서 얻을 수있는 이점 지역 사회와 생태계입니다

따라서 실용적인 제작 품질을 원한다면 솔루션을 제공한다면 TensorFlow는 그 최선의 대답 너무 많은 대기업과 개발자가 있기 때문에 심각한 개발을 위해 TensorFlow를 사용하는 사람들, ARM, 이베이, 인텔, 드롭 박스, 트위터 등이있다 그들은 모두 TensorFlow를 사용하고 있습니다 이제는 무대를 Hak에 전달하고 싶습니다 누가 당신이 안드로이드를 어떻게 구현할 수 있는지 이야기 할 것입니다

TensorFlow에서 제공하는 애플리케이션 [박수 갈채] 오 감사합니다 Hak MATSUDA : 고마워요, Kazu Android 부분으로 넘어 갑시다 Kazu가 말했듯이, 우리는 많은 것을 발견했습니다

TensorFlow를 실행하는 유용한 사용 사례 모바일 장치에 대한 추론 우리가 어떻게 통합 할 수 있는지 살펴 보겠습니다 모바일 장치의 TensorFlow 추론 우리가 어떻게 그것을 최적화 할 수 있는지에 대해 설명합니다 TensorFlow는 다음을 포함한 여러 모바일 플랫폼을 지원합니다 Android, iOS 및 Raspberry Pi와 호환됩니다

이 강의에서는 Android와 같은 휴대 기기에 중점을두고 및 IOS TensorFlow 공유 객체를 처음부터 빌드하기 조금 까다 롭습니다 여러 단계를 거치기 시작했습니다 GitHub의 [INAUDIBLE], Bazel 설치, 설치 안드로이드 스튜디오, 안드로이드 SDK 및 NDK, 마지막으로 설정 파일을 편집하는 등의 작업을 수행 할 수 있습니다 그러나 우리에게는 오늘 좋은 소식이 있습니다

이 IO를 발표하면서 방금 JSON 통합을 추가했습니다 그 단계가 훨씬 쉬워집니다 [박수 갈채] 고마워요, 고마워요 빌드 줄에 하나의 선을 추가하기 만하면됩니다 Gradle은 나머지 단계를 처리합니다

도서관 자료실에서 [INAUDIBLE] TensorFlow 공유 객체가 JCenter에서 다운로드되면, 응용 프로그램과 자동으로 연결됩니다 또한 미리 작성된 모델을 가져올 수 있습니다 파일 (예 : 시작, 스타일 화, 등등, 구름 에서뿐만 아니라 iOS에서도 쉽게 사용할 수 있습니다 우리는 Cocoapod 통합을 시작했습니다

지금은 아주 간단합니다 TensorFlow API를 사용하는 방법을 살펴 보겠습니다 Android 유추 라이브러리를 출시했습니다 Java 응용 프로그램 용 TensorFlow를 통합합니다 라이브러리는 Java의 [INAUDIBLE]입니다

네이티브 구현에 성능에 미치는 영향은 최소화됩니다 처음에는 TensorFlow 유추 인터페이스를 만들고, APK의 자산에서 모델 파일을 엽니 다 그런 다음 피드 API를 사용하여 입력 피드를 설정하십시오 모바일에서는 입력 피드가 카메라, 가속도계, 등등

그런 다음 추론을 실행하십시오 마지막으로 결과를 가져올 수 있습니다 거기에 fetch 메소드를 사용합니다 이 통화가 모두 통화를 차단하고 있음을 알 수 있습니다 따라서 작업자 스레드에서 실행하는 대신 작업 스레드에서 실행하려고합니다

API는 길고 오랜 시간이 걸릴 것이기 때문에 메인 스레드, 몇 초 이것은 Java API입니다 물론 일반 C ++ API도 사용할 수 있습니다 당신이 C ++을 사랑한다면 내가하는 것처럼 승인

데모로 넘어 갑시다 이것은 Android에서 실행되는 TensorFlow 샘플입니다 샘플에는 세 가지 모드가 있습니다 첫 번째는 Inception v3을 실행 중입니다 카메라 이미지를 분류합니다

또한 분류 된 얼굴과 양식화 된 사진이 있습니다 견본 이 사진은 카메라 미리보기에 예술적 필터를 적용하고 있습니다 [박수 갈채] 고맙습니다 그리고 데모에서 한 가지 특별한 점 GPU를 사용하여 데모를 약간 수정 한 것입니다

[INAUDIBLE] 계산 쉐이더를 사용하십시오 [INAUDIBLE] 샘플은 CPU를 지원합니다 새로운 최적화 하지만 GPU를 사용하여 그것을 조정했습니다 그리고 이것은 단지 실험을 위해서 였고 재미를 위해서였습니다

그것은 꽤 재미 있었다 그리고 저는 TensorFlow를 GPU에 맞게 최적화하는 방법을 많이 배웠습니다 기본적으로 Android 기기에서 성능 제한 요소 대부분 메모리 대역폭에서 발생합니다 컴퓨팅 자체가 아니라 메모리 대역폭 줄이기 많은 도움이되었습니다 예를 들어, 어떤 [INAUDIBLE] 커널에서, 그것은 32 32 x 32 32 x 4 샘플을 가져 오는 중입니다

하나의 출력 값을 생성하기 만하면됩니다 Compute의 관점에서 엄청난 양의 데이터입니다 셰이더 따라서 메모리 대역폭은 안드로이드에있어 결정적으로 중요합니다 및 모바일 장치 최적화

어쨌든, 모두 TensorFlow 코드를 조정할 수 있습니다 오픈 소스이기 때문입니다 오픈 소스의 아름다움입니다 맞죠? 이제 모바일에 TensorFlow 추론을 통합 할 수 있습니다 내가 아주 쉽게 설명했다

그러나 성능에는 아직 문제가 있습니다 심지어 모바일 장치 성능 상당히 증가했다 클라우드 나 데스크톱보다 컴퓨팅 성능이 떨어집니다 또한 제한된 RAM을 가지고 있습니다 모바일에 소중한 자료

응용 프로그램이 1 기가 바이트의 RAM을 사용한다면, 그때 응용 프로그램은 매우 가능성이 높습니다 시스템 자체에 의해 죽임을 당한다 응용 프로그램이 백그라운드로 이동하면 행복한 상황이 아니지, 그렇지? TensorFlow를 최적화 할 수있는 방법에 대해 살펴 보겠습니다 그래픽, 메모리 사용 공간 감소, 런타임 성능 향상 및로드 시간 개선 잘 이 모델은 Inception v3 모델의 모델입니다 이 모델은 약 91 메가 바이트의 저장 공간을 필요로하며, 2,500 만 가지 매개 변수가 있습니다

그리고 바이너리 크기는 12 메가 바이트 걸릴 것입니다 그것은 거대합니다 그리고 우리는 그래프를 최적화하는 여러 기법을 가지고 있습니다 Graph Transform (그래프 변환)을 사용하여 그래프 고정 도구, 양자화, 메모리 매핑 등 가자

그래프 정지는로드 중 하나입니다 시간 최적화, 변수 노드를 변환 상수 노드에 변수 노드 란 무엇입니까? TensorFlow에서 변수 노드는 다른 파일에서 시작됩니다 그러나 상수 노드가 포함되어 있습니다 그래프 def 자체에서

따라서 변수를 상수 노드로 이동하십시오 여러 개의 파일을 하나의 파일로 연결할 수 있으며, [INAUDIBLE]처럼 그것은 약간의 성능이 될 것입니다 모바일에서 이기고 다루기가 더 쉽다 그렇게하기 위해 우리는 동결 그래프 점 파이썬 스크립트를 준비합니다

그래프 변환 도구는 친구입니다 이 도구는 다양한 최적화 작업을 지원하며, 추측을 위해 사용되지 않는 노드를 스트립하는 것과 같은 하지만 그것은 학습 문구에서만 사용됩니다 추론 노드를 배울 때 필요하지 않습니다 나는 그것이 현재 약간의 작은 단계가 필요할 것이라고 생각한다

어떤 노드가 시작 노드인지 판단한다 어느 노드가 출력 노드인지를 결정한다 따라서이 도구는 시작과 출력이 모두 필요합니다 포인트는 수동으로 지정됩니다 양자화에 대해 이야기 해 봅시다

신경망 작업에는 무리가 필요합니다 매트릭스 특성의, 곱하기의 톤을 의미 추가 작업 현재 모바일 장치는 일부 기능을 수행 할 수 있습니다 전문 하드웨어 예를 들어, [INAUDIBLE] 명령 CPU, 범용 컴퓨팅 GPU, DSP 등에서

대략적으로 모바일 CPU에서는 총 10 ~ 20GB FLOPS GPU를 사용하면 300 ~ 500 기가 플롭스 이상을 달성 할 수 있습니다 큰 숫자처럼 들리지만 여전히 데스크톱 또는 서버 환경 기반 그래서 우리는 최적화를 수행하기를 원합니다 양자화는 기술 중 하나입니다 메모리 사용 공간과 컴퓨터 부하를 줄입니다 일반적으로 TensorFlow는 단 정밀도 부동 값을 사용합니다

입력 및 수학을 위해 또한뿐만 아니라 출력 아시다시피, 단 정밀도 부동 소수점 각각 32 비트 걸린다 그러나 우리는 정밀도를 16 비트, 8 비트로 줄일 수 있다는 것을 발견했습니다 비트 또는 심지어 더 적은 결과를 유지하면서, 우리의 학습 과정에는 자연에 의해 약간의 잡음 그리고 약간의 여분의 소음을 추가하는 것은별로 중요하지 않습니다

따라서 양자화 된 가중치가 최적화입니다 저장 공간의 크기를 줄이면 정밀도가 떨어집니다 그래프 파일의 상수 노드의 값 그러나 양자화 된 가중치 최적화와 함께, 값은 메모리에 확장됩니다 그래프가로드됩니다

그래서 우리에게는 또 다른 최적화가 있습니다 우리는 그것을 양자화 된 계산이라고 부를 수 있습니다 양자화 된 계산으로, 우리는 양자화 된 값을 사용하여 계산 정밀도를 줄일 수 있습니다 예배 규칙서 이것은 첫 번째 메모리 대역폭에 좋으며, 이는 모바일 장치의 제한 요소입니다

또한 하드웨어는 이러한 정밀도 값을 더 빨리 처리 할 수 ​​있습니다 단 정밀도 부동 값보다 그러나 우리는 여전히 열려있는 문제가 있습니다 양자화 된 계산을 수행하기 위해 최대 값과 최소값이 필요하다 양자화 된 값의 범위를 지정합니다 우리는 여전히 훌륭한 해결책이 없습니다

그것은 여전히 ​​수동입니다 그러나 활발한 연구가 진행되고 있으므로 희망적으로이 문제는 곧 해결 될 것입니다 이것은 양자화 된 특성화의 예입니다 최적화는 TensorFlow에서 작동합니다 TensorFlow에는 양자화를 지원하는 일부 연산이 있습니다 예를 들어, 행렬에 대한 컨볼 루션 [INAUDIBLE] 등을 곱하십시오

우리는 그것이 충분히 다루기에 충분하다고 생각합니다 대부분의 추론 시나리오 그러나 우리는 여전히 연산 순서를 양자화하지 않았습니다 아직 값을 양자화하고 값을 역 양자화해야하기 때문에 각 노드의 앞과 뒤 바로 출력 그리고 그래프 변환 도구는 부품을 분석합니다

각 그래프 노드의 때로는 불필요한 양자화 및 역 양자화 된 값 메모리 매핑은 로딩 시간에 대한 또 다른 최적화입니다 이 최적화를 통해 모델 파일 변환되어 직접 매핑 될 수 있습니다 약간있을 수있는 memmap API 사용 일부 Linux 기반 운영에서 성능 최적화 Android와 같은 시스템입니다 또 하나는 실행 파일 크기를 줄이는 것입니다

모바일에서 중요한 주제입니다 모바일 장치에서, 실행 가능한 패키지 크기는 특정 크기로 제한됩니다 Android의 경우 100 메가 바이트, 이진, 그래픽 및 기타 리소스를 포함하여 기본적으로 휴대 장치는 선택한 여러 개의 거의 충분하다 추론 작업을 커버하지만, ops는 학습 프로세스를 사용 누락 따라서 모바일 장치에서 학습을하고 싶다면, 추가 작업을 등록해야합니다

또한 그래프에 일부 사전 등록 된 작업, 또한 그 중 일부를 제거합니다 그렇게하기 위해 선택 등록을 할 수 있습니다 예를 들어, Inception v3의 경우, 선택 등록을함으로써, 원래의 바이너리 크기는 12 메가 바이트였습니다 최적화 후에는 15 메가 바이트로 줄일 수 있습니다

이 최적화를 위해서는 공유를 다시 빌드해야합니다 당신 지역의 물건 따라서 빌드 환경을 구축해야합니다 따라서 이러한 최적화를 통해 Inception v3 그래프 이제 23 메가 바이트와 15 메가 바이트가됩니다

현재 바이너리 크기는 75 % 작아집니다 카즈 돌아 가자 KAZ SATO : Hak 고맙습니다 하크 (Hak)가 언급했듯이, 너무 많습니다

[박수 갈채] 고맙습니다 Hak이 언급했듯이, 많은 팁과 트릭이 있습니다 TensorFlow 모델 최적화 안드로이드 모바일 응용 프로그램으로 짜내다 그리고 바로 지금 할 수있는 일입니다 이러한 기술은 현재 사용 가능합니다

하지만 지금은 조금 이야기하고 싶습니다 가까운 미래에 출시 될 새로운 기술에 대해, TensorFlow Lite 및 Android Neural Network API 등이 있습니다 NNAPI 란 무엇입니까? 신경망 처리를위한 새로운 API입니다 안드로이드 안쪽에, 그리고 안드로이드 프레임 워크에 추가됩니다 새로운 API 추가의 목적 캡슐화하고 추상화하는 것입니다

계층은 GPU, DSP, 및 ISP 최신 스마트 폰은 강력한 컴퓨팅 리소스를 갖추고 있습니다 GPU 또는 DSP와 같은 CPU 이외의 다른 장치 특히 DSP는 거대한 양의 행렬 및 벡터 계산, DSP 나 GPU를 사용하는 것이 훨씬 빠릅니다 신경 네트워크 추론,보다는 CPU를 사용하여

하지만 지금 당장 당신이 그렇게하고 싶다면, 도서관에 직접 가야합니다 하드웨어 공급 업체가 바이너리를 빌드합니다 혼자서 지루한 작업입니다 또한 휴대용이 아닙니다

대신 표준 API를 제공하여 개발자가 하드웨어 가속기를 인식 할 필요가 없다 각 개별 공급 업체로부터 Neural Network API 위에는, 우리는 TensorFlow Lite를 제공 ​​할 것입니다 그것은 새로운 TensorFlow 런타임이 될 것입니다 모바일 및 임베디드 애플리케이션에 최적화되어 있습니다

따라서 TensorFlow Lite는 스마트하고 컴팩트 한 모바일 용으로 설계되었습니다 또는 임베디드 응용 프로그램 또한 Android와 결합되도록 설계되었습니다 NNAPI 그래서 당신이해야 할 일은 TensorFlow Lite로 모델을 작성하면됩니다

결국 모든 이점을 얻게 될 것입니다 당신은 안드로이드 NNAPI에서 얻을 수 있습니다, 하드웨어 가속과 같은 가까운 장래에 오픈 소스로 등장하게 될 것입니다 그러니 계속 지켜봐주십시오 이러한 새로운 기술에 관심이 있다면, 이 QR 코드의 사진을 찍어주세요 Android 용 ML에 대한 설문 조사에 참여할 수 있습니다

의견이나 요청을 할 수있는 곳 새로운 제품을 위해 네, 고마워요 그래서 마지막으로, 아주 흥미롭고 재미있는 것을 보여주고 싶습니다 TensorFlow로 구축 된 실제 응용 프로그램 모바일 및 임베디드 시스템에서 첫 번째 응용 프로그램은 Raspberry Pi에서 실행 중이며 일본인 오이 농부에 의해 사실, 나는이 사진을 찍었다

나는 오이 농장에 가서이 사진을 찍었습니다 그리고 그들은, 당신은 볼 수 있습니다 – 오, 미안 포인터가 없습니다 [CHUCKLE] 그래서 당신은 한 사람을 중간에두고 있습니다 그는 [부적절하다]

그는 2 년 전에 오이 농업을 돕기 시작했습니다 그리고 그는 오이를 올바른 부류로 분류하는 것을 알았습니다 가장 지루한 작업입니다 그의 어머니는 하루 8 시간을 보냈다 길이, 또는 색깔에 기초하여 각 오이를 분류하고, 9 개의 다른 수업으로 그녀를 돕고 싶지 않았어

그래서 대신 그는 TensorFlow를 다운로드했습니다 그 자신의 오이 선별기를 만들었습니다 [박수 갈채] 그가 한 일은 9,000 장의 사진을 찍은 것입니다 다른 오이 중에서 그의 어머니에 의해 분류 된 레이블, TensorFlow 모델을 혼자서 교육했습니다 그리고 그는 $ 1,500을 지출함으로써 스스로로 분류기 로봇을 만들었습니다

그리고 TensorFlow 모델은 Raspberry Pi에서 실행됩니다 접시에 놓은 오이를 감지 할 수 있습니다 그리고 그것은 오이를 9 개의 다른 종류로 분류 할 수 있고, 모양과 색상을 기반으로합니다 그리고 이것은 시스템의 시스템 다이어그램입니다 그래서 세 부분으로 구성됩니다

Arduino Micro는 서버 제어에 사용됩니다 및 모델 그리고 라스베리 파이에는 오이의 사진을 찍을 카메라가 있습니다 접시에 그리고 아주 작은 TensorFlow 모델을 실행합니다

그리고 이것은 실제로 아주 훌륭한 예입니다 작업을 분할하는 방법, 작업 에지 장치 및 클라우드 파트로 기계 학습을위한로드 그는 TensorFlow 전체 세트를 실행했기 때문에 Raspberry Pi 내부의 모델이 너무 무겁습니다 그래서 그는 그것을 두 가지 과제로 나누기로 결정했습니다 따라서 TensorFlow 모델은 Raspberry Pi에서만 실행됩니다

접시에 오이가 있는지 여부를 감지합니다 그리고 접시에 오이가 있음을 감지했을 때만, 그것은 그림을 서버로 보냅니다 그는 더 강력한 TensorFlow를 가지고 있습니다 오이를 9 개로 분류 할 수있는 모델 다른 클래스 흥미로운 또 다른 응용 프로그램을 살펴 보겠습니다

Android 및 iOS에서 실행되는 체조 운동 득점자 그게 뭐야? 사실 모든 일본인은 운동을 잘 알고 있습니다 우리는 전국 라디오 방송을 가지고 있기 때문에 방송 네트워크 그들은 동시에 같은 운동 음악을 연주한다 매일 아침

그리고 수천만 명의 일본인 매일 아침 같은 운동을하고 있습니다 당신은 알고 계십니까? [웃음] 이 응용 프로그램은 – 우리는 그것을 득점자라고 부릅니다 당신은 음악으로 당신의 운동을 해왔습니다 그리고 모션 센서로 모션을 캡처하려면, 그들은 TensorFlow를 사용했습니다 그리고 그들은 TensorFlow 모델을 포착하도록 훈련시킬 수있었습니다

데이터에서 패턴 또는 피쳐 추출 모션 센서에서 인간의 손으로 만든 동작을 평가할 수 있습니다 또한 TensorFlow 컴파일러를 자체적으로 구축했습니다 그래서 그들은 기술을 적용 할 수있었습니다 양자화 또는 근사와 같은 그리고 그들은 TensorFlow를 줄일 수있었습니다

모델을 수십 메가 바이트에서 수 메가 바이트로 모델링합니다 따라서 이것이 생산 품질을 구축하는 핵심 기술이었습니다 TensorFlow 기능을 갖춘 Android 및 iOS 애플리케이션 운동 실황 시범을 보도록하겠습니다 득점자 그럼 내가 여기로 바꿀 수 있을까? 선택할 수있는 응용 프로그램입니다 다양한 종류의 운동

그리고 나는 가장 표준적인 것을 연주 할 것이다 [음악 재생] 그래서 이것은 음악입니다 [웃음] [일본 축구 연발 스코어] [박수 갈채] 나는 잘하고 있니? 그래서 그렇게 그러니 그만하자 [웃음꾼과 박수] [음악 스톱] 충분 해 충분 해 [웃음] 이제 TensorFlow 모델이 시도하고 있습니다 이 운동을 얼마나 잘 수행했는지 평가하십시오

그리고 당신은 막대 차트를 여기에서 볼 수 있습니다 그것이 TensorFlow의 변형입니다 이 애플리케이션 내부의 모델 그것은 진짜입니다 승인? 슬라이드로 돌아가십시오

그것이 우리가 보여주고 싶은 것입니다 이 세션에서는 다음을 포함한 많은 것을 배웠습니다 일본에서 또 다른 이상한 물건, 그런 다음 몇 가지 최적화 기술 TensorFlow 응용 프로그램 구축 용 양질의 안드로이드 및 iOS 애플리케이션을 제공합니다 관심이 있으시면 TensorFloworg로 이동하십시오

시작하기에 많은 자료를 얻을 수 있습니다 그리고 훌륭한 codelab이 있습니다 codelab 웹 사이트에서 정말 고맙습니다 Hak MATSUDA : 고마워

[박수 갈채]

Flutter 1.0 release, ARCore & Sceneform updates, Android Codelabs , Drive APIs, & more!

TIMOTHY JORDAN : 안녕하세요, 저는 Timothy Jordan입니다 The Developer Show의 경우 이것은 가장 멋진 개발자의 매주 업데이트 Google의 뉴스

Flutter Live는 지난 주 런던에서 일어났습니다 Flutter 10은 일부 파트너와 함께 발표되었습니다 벡터 애니메이션 및 지속적인 통합을위한 도구 및 배달 설명의 링크를 확인하십시오

아래의 주요 하이라이트 동영상, 게시물, 및 비디오 재생 목록 AR 코어 16은 현재 더 개선 된 상태로 제공됩니다 보다 현실적이고 설득력있게 만드는 데 도움이됩니다 증강 현실 경험

업데이트는 더 나은 평면 경계 추적 기능을 포함합니다 장면 형태의 몇 가지 조명 개선 Android 개발자 기초 및 Android 고급 과정은 이제 시리즈로 제공됩니다 코드 랩의 링크는 게시물에 있습니다 나는 당신과 공유 할 몇 가지 드라이브 업데이 트가 있습니다

먼저 Google 드라이브 활동 API의 새 버전 확장 된 데이터 모델에서 사용할 수 있습니다 V1은 2019 년 12 월 31 일에 종료됩니다 마이그레이션 가이드가 게시물에 있습니다 또한 팀은 전적으로 집중할 것입니다 드라이브의 기능을 확장하는 방법 REST API – Android API가 폐기 될 것임을 의미합니다

2019 년 12 월 6 일 이것에 대한 이전 가이드도 사용할 수 있습니다 그것의 포스트에서 연결해 클라우드 보안 명령 센터 조직 수준의 가시성 제공 자산, 취약성 및 위협, 이제 베타 버전으로 제공됩니다 이 릴리스에는 다음과 같은 몇 가지 새로운 기능이 포함되어 있습니다

GCP 서비스 전반에 적용 범위 확대, 확장 된 고객 도서관 등 세부 정보 및 스크린 샷이 게시물에 있습니다 우리는 최근에 새로운 장치 명령 기능을 도입했습니다 클라우드 IoT 핵심 관리 서비스의 경우, 높은 주파수, 낮은 대기 시간, 클라우드와 IoT 장치 간의 일시적인 메시징 게시물 세부 정보 및 시작 링크가 있습니다 지난 주, 몬트리올은 가장 큰 기계를 주최했습니다

올해의 학습 컨퍼런스, 연례 컨퍼런스 신경 정보 처리 시스템에 관한 것이다 당신이 그것을 놓친다면 걱정하지 마십시오 우리가 제시 한 모든 작업은이 게시물과 연결되어 있습니다 TF 등급은 확장 가능한 TensorFlow 기반 라이브러리입니다 순위를 매기는 학습

이는 통합 프레임 워크를 제공합니다 알고리즘 순위를 학습하는 최첨단 기술을 포함합니다 pairwise 또는 listwise 손실 함수를 지원하며, 다중 항목 채점, 순위 측정 기준 최적화, 순위를 매기는 편견없는 학습 GitHub 레포에 대한 추가 정보 및 링크 아래 설명에 링크 된 게시물에 있습니다 좋아요, 구독하고 공유하는 것을 잊지 마십시오

저는 The Developer Show의 Timothy Jordan입니다 보고 주셔서 감사 드리며 다음 주에 다시 보겠습니다 휴가 좋은 소리 휴가가 내게 어떤 의미인지 알지? 나는 다른 프로젝트에 종사하면서 잠시 못 들었습니다

#81 Android Support Library Part 2 | Backward Compatibility, Versions & API Levels in Android

안녕하세요, BackToCoding에 오신 것을 환영합니다 이 비디오를 더 잘 이해하기 위해 이전의 동영상 또는 전체 재생 목록을 아래 설명에서 확인하십시오

오늘 우리는 "이전 버전과의 호환성, 버전 및 API 레벨에 대해 이야기 할 것입니다 Android 지원 라이브러리 " 시작하기 전에 구독 버튼과 벨 아이콘을 치는 것을 잊지 마세요 동영상을 게시 할 때마다 즉시 그에 대한 알림을받습니다 지원 라이브러리를 사용하면 이전 버전의 Android 플랫폼에서 실행되는 앱을 지원할 수 있습니다 최신 버전의 플랫폼에서 사용할 수있는 기능 예를 들어 5

0 이하의 Android 버전 (API 수준 21)에서 실행되는 앱은 프레임 워크 클래스에 의존하여 Material Design 요소를 해당 버전으로 표시 할 수 없습니다 Android 프레임 워크의 Material Design은 Material Design을 지원하지 않습니다 그러나 앱이 v7 appcompat 라이브러리를 통합하는 경우 해당 앱은 머티리얼 디자인 지원을 비롯하여 API 레벨 21에서 제공되는 기능 결과적으로 앱은 광범위한 플랫폼에서보다 일관된 환경을 제공 할 수 있습니다 버전 지원 라이브러리 API는 다른 버전의 프레임 워크간에 호환성 레이어도 제공합니다 아피스

이 호환성 레이어는 투명하게 인터셉트합니다 API는 전달 된 인수를 호출하고 변경하며, 작업 자체를 처리하거나 리디렉션합니다 수술 지원 라이브러리의 경우 호환성 레이어의 메서드를 사용하면 이전 버전과 최신 Android 출시 Android가 새로 출시 될 때마다 새로운 수업이 추가됩니다

메소드를 사용하고, 일부 구형 클래스 및 메소드를 더 이상 사용하지 않습니다 지원 라이브러리에는 이전 버전과의 호환성을 위해 사용할 수있는 호환성 클래스가 포함되어 있습니다 이름에 "Compat"(예 : ActivityCompat로) 앱이 지원 클래스의 메소드 중 하나를 호출하면 해당 메소드의 동작은 기본 안드로이드 버전 장치에 필요한 프레임 워크가 포함 된 경우 기능을 지원 라이브러리는 프레임 워크를 사용합니다

기기가 이전 버전의 Android를 실행하는 경우 지원 라이브러리가 시도합니다 사용할 수있는 API와 유사한 호환 가능한 동작을 구현할 수 있습니다 대부분의 경우 Android 버전을 확인하는 복잡한 코드를 작성할 필요가 없습니다 해당 버전을 기반으로 다른 작업을 수행합니다 지원 라이브러리를 사용하여 해당 검사를 수행하고 적절한 동작을 선택할 수 있습니다 의심스러운 경우 프레임 워크 클래스에 대한 지원 라이브러리 호환성 클래스를 선택하십시오

지원 라이브러리의 각 패키지에는 세 부분으로 된 버전 번호 (XYZ)가 있습니다 Android API 수준 및 해당 라이브러리의 특정 버전에 해당합니다 예를 들어, 지원 라이브러리 버전 번호 2234는 지원 라이브러리 버전 3

4입니다 API 22 일반적으로 앱 API에 대한 지원 라이브러리의 최신 버전을 사용하십시오 컴파일되고 대상이되거나 최신 버전입니다 예를 들어 앱이 API 25를 타겟팅하는 경우 지원 라이브러리의 버전 25

XX 타겟 API 용 라이브러리보다 항상 새로운 지원 라이브러리를 사용할 수 있습니다 예를 들어 앱이 API 22를 타겟팅하는 경우 버전 25 이상의 지원을 사용할 수 있습니다 도서관 그 반대의 경우는 사실이 아닙니다 최신 API가있는 이전 지원 라이브러리

일반적으로, 귀하는 앱의 가장 최신 API 및 지원 라이브러리 실제 버전 번호 외에도 지원 라이브러리 자체의 이름은 라이브러리가 이전 버전과 호환되는 API 수준 앱에서 최소 API보다 높은 API에 대한 지원 라이브러리를 사용할 수 없습니다 앱이 지원합니다 예를 들어 앱에서 지원하는 최소 API 10이면 v13 지원 라이브러리 또는 v14 환경 설정 지원 라이브러리를 사용할 수 없습니다 앱 앱에서 여러 지원 라이브러리를 사용하는 경우, 최소 API가 최대 수보다 커야합니다

즉, 지원 라이브러리를 포함하는 경우 v7, v13 및 v14의 최소 API는 14 이상이어야합니다 v4 및 v7 라이브러리를 비롯한 모든 지원 라이브러리에는 최소 SDK가 필요합니다 API 9 다른 비디오를 확인하는 것이 당신에게 도움이 될 수 있음을 잊지 마십시오

Drive Android API

안녕하세요, 저는 Jen King Drive Android API입니다 안녕하세요, 저는 Jen King입니다

Android에서 Drive Android의 기술 책임자입니다 기술 감독자 API 오늘, 나는 너를 보여줄 것이다 그리고 오늘 나는 너에게 어떻게 보여줄 것인가? Google 드라이브를 Android 앱에 통합하여 Android 앱에 드라이브 통합을 추가하는 방법 드라이브의 API는 Google Play 서비스 제품군의 일부입니다이 API는 Google Play 서비스에 포함되어 있습니다

즉, 앱에 적은 양의 코드 만 추가하면됩니다 이러한 API의 기능을 구현하고 이러한 API 기능의 이점을 얻을 수 있습니다 그리고 안드로이드 233 이상을 가진 거의 모든 장치에서 진저 브레드 이상의 버전을 실행하는 거의 모든 안드로이드 장치에서 실행할 수 있습니다

사용자를 위해 드라이브를 통합 할 경우 많은 이점이 있습니다 Google 드라이브 통합이 많은 이유가 있습니다 사용자에게 위대한 일이라면 무리가 아닙니다 파일은 자동으로 클라우드에 백업되고, 파일은 자동으로 클라우드에 백업되며, 웹 페이지를 비롯한 다양한 장치의 웹을 포함하여 여러 장치에서 액세스 할 수 있습니다 모바일 장치 및 웹 페이지의 드라이브 앱을 사용하여 이러한 파일을보고 편집하고 모바일 장치 및 웹에서보고 편집 할 수 있습니다

오프라인 일 때도 드라이브 사용 앱을 사용할 수 있습니다 좋아, 시작하자 시작하자 영수증 수집을위한 샘플 애플리케이션을 사용합니다 앱과 드라이브를 통합하는 방법을 보여 드리겠습니다

영수증 수집기 샘플 앱을 사용하여 Google 드라이브를 통합하는 방법을 시연합니다 이 응용 프로그램은 사용자가 영수증 사진을 찍을 수 있도록합니다이 응용 프로그램은 사용자가 영수증 사진을 찍을 수 있습니다 또한 드라이브에 저장하여 비용을 관리하고 드라이브에 저장하여 지출을 관리 할 수 ​​있습니다 드라이브 Android API를 사용하려면 드라이브 Android API를 사용하려면, 먼저 개발자 콘솔에 항목을 만들어야합니다 먼저 앱을 드라이브 앱으로 등록해야합니다 개발자 콘솔에 항목을 작성하여 앱을 드라이브 앱으로 등록합니다

콘솔은 앱의 패키지 이름을 묻고 콘솔은 사용자에게 앱의 패키지 이름과 서명의 지문 드라이브 API가 앱 인증서를 확인하여 드라이브 API가 앱을 인증 할 수 있도록합니다 개발자 콘솔에서 프로젝트 ID 만들기 개발자 콘솔에서 프로젝트 ID 만들기 Android iOS에서 제작할 수 있으며 웹 사이드에서는 앱 버전을 제작할 수 있습니다 Android, iOS 및 웹에서 다중 플랫폼 응용 프로그램을 사용하고 단일 프로젝트를 공유합니다 이러한 응용 프로그램은 모든 프로젝트 구성 구성을 사용하여 공유 할 수 있습니다 프로젝트가 등록되면 앱에 Google Play 서비스 제품군에 대한 지원을 추가 할 수 있습니다

프로젝트가 등록되면 Android 드라이브 사용을 시작할 수 있습니다 애플리케이션에 Google Play 서비스 API를 포함하여 Drive Android API API를 시작하세요 드라이브를 통합하기 전에 Google 애플리케이션은 함께 사용하기 전에 앱이 영수증을 저장합니다 로컬 장치의 영수증을 장치의 로컬 파일 시스템에 저장합니다 즉, 다른 장치에서 해당 장치에 액세스하는 것이 어려우며 다른 장치에서 쉽게 액세스 할 수 없습니다

기기를 분실하거나 깨뜨린 경우 데이터가 손실 될 수 있습니다 기기를 분실하거나 깨뜨린 경우 데이터가 손실 될 수 있습니다 그러나 드라이브 Android API를 사용하면 이러한 영수증을 쉽게 백업 할 수 있습니다 드라이브 Android API를 사용하면 이러한 영수증을 쉽게 백업 할 수 있습니다 이렇게하려면 Drive API를 사용합니다

이렇게하려면 새 파일을 만듭니다 드라이브 API를 사용하여 이미지 바이트로 새 파일을 만듭니다 드라이브 API가 이미지 바이트 데이터를 서버에 동기화하여 데이터를 서버에 동기화합니다 영수증 이미지 데이터를 Contents 객체에 써야합니다 영수증 이미지를 내용 객체에 써야합니다 그런 다음이 파일을 사용하여 새 드라이브 파일을 만들고이 내용을 사용하여 새 드라이브 파일을 만듭니다

이제 우리는 모든 영수증 사진을 사용자의 루트 디렉토리에 저장합니다 지금은 모든 영수증을 추가합니다 즉 내 드라이브에 사용자의 루트 폴더 (내 드라이브라고도 함)에 넣습니다 새 파일을 저장하려면 createFile을 호출해야합니다 새 파일을 저장하려면 다음 위치의 폴더에서 createFile을 호출합니다 그리고 우리는 파일을 삽입하고 내용을 전달하려고합니다

데이터를 포함한 내용 객체입니다 createFile을 호출하면 새 파일의 드라이브 ID가 반환되고 createFile 호출은 새 파일의 드라이브 ID를 반환합니다 이제 영수증이 자동으로 사용자의 드라이브에 업로드됩니다 영수증이 자동으로 업로드됩니다 사용자가 사용자의 드라이브로 이동하여 사용자가 드라이브를보고 구성 할 수 있도록 허용 드라이브 웹 UI에서이를보고 구성합니다

다음으로 영수증 목록을 변경하고 영수증 목록을 변경해야합니다 이를 위해서는 드라이브 API가 영수증 파일 목록을 요청해야합니다 로컬 파일 시스템 대신 드라이브 API에서 영수증 파일 목록을 요청하는 대신 로컬 파일 시스템이 필요합니다 이렇게하려면 영수증 신청서에 액세스해야하며 사용자의 내 드라이브에있는 모든 파일을 쿼리합니다 사용자의 드라이브는 영수증 앱에서 액세스 할 수있는 모든 파일 폴더를 쿼리하는 사용자 디렉토리입니다 이 쿼리는 서버 대신 로컬 드라이브 데이터베이스를 사용하며이 쿼리는 로컬 드라이브 데이터베이스 대신 오프라인 일 때도 작동하므로 오프라인 일 때도 계속 작동합니다

드라이브 Android API가 자동으로 동기화됩니다 Android Android API가 자동으로 메타 데이터를 동기화합니다 다른 장치에서 만든 파일에 대해 다른 장치에서 만든 파일의 메타 데이터입니다 영수증 목록을 표시하려면 영수증 목록보기를 변경합니다 드라이브 API의 데이터를 사용하려면 드라이브의 데이터와 동기화 된 상태로 유지하십시오 목록보기가 필요한 어댑터는 목록보기의 어댑터 인 쿼리 메서드를 사용하여 메타 데이터 버퍼를 사용합니다

조회 메소드에 의해 리턴 된 리턴 된 메타 데이터 버퍼 오브젝트 오브젝트 목록의 각 파일에 대해 제목 필드를 사용하여 항목을 생성합니다 제목 필드를 사용하여 목록의 각 파일에 대한 항목을 생성합니다 마지막으로 사용자가 목록에서 열면 마지막으로 영수증 이미지와 설명을 표시해야합니다 사용자가 목록에서 열 때 영수증 그림과 설명 정보를 표시해야합니다

영수증 이미지를 표시하려면 DriveApigetFile을 사용해야합니다 영수증 이미지를 표시하려면 드라이브 파일 DriveApigetFile을 사용하여 영수증의 영수증 Drive 파일을 가져오고, 그리고 DriveFileopenContents를 사용하여 내용을 열고 엽니 다

파일 내용이 장치에서 이미 사용 가능한 경우 파일 내용이 장치에 이미있는 경우, 파일을 여는이 메서드는 Open File 메서드가 즉시 반환 할 원하는 내용을 즉시 반환합니다 그렇지 않으면 드라이브 Android API가 표시됩니다 그렇지 않으면 드라이브 Android API 서버에서 콘텐츠 가져 오기가 서버에서 콘텐츠를 가져옵니다 이제 응용 프로그램은 앞에서 설명한대로 수행 할 수 있습니다 응용 프로그램은 이전과 마찬가지로 작동합니다

사용자가 추가로 얻을 수있는 이점 즉, 사용자는 Android 기기 또는 웹 페이지의 모든 Android 기기에서 영수증을 모두 열 수 있습니다 모든 영수증 정보와 웹에서 확인하십시오 세 가지 멋진 기능이 있습니다 세 가지 더 멋진 기능이 있습니다 사용자 환경을 개선하는 데 도움이되는 사용자 환경을 개선 할 수 있습니다

고정 파일 파일 선택기 및 응용 프로그램 폴더 고정 파일, 파일 선택기 UI 및 응용 프로그램 폴더 먼저 고정 API를 설정하는 데 사용할 수있는 첫 번째 포인트는 사용자가 영수증을 저장할 수 있도록 허용하는 것입니다 사용자가 오프라인 사용을 위해 로컬 고정 파일에 영수증을 저장하거나 핀 고정 API 설정을 사용하여 파일을 고정 시키도록합니다 API는 파일 내용이 로컬 장치에 남아 있는지 확인합니다이 API는 파일 내용이 장치에 있는지 확인합니다 그리고 매끄러운 네트워크의 경우 최신 정보를 유지하고 최신 상태로 유지합니다

사용자가이 기능을 사용하려면이 기능을 사용자에게 표시하려면, 뷰 영수증 페이지에 클립 단추를 추가합니다 뷰 영수증에 핀 단추를 추가합니다 사용자가 파일을 로컬 장치 UI에 저장할 것인지 여부를 선택하면 사용자가 장치에 파일을 보관하도록 선택할 수 있습니다 두 번째 요점은 현재 사용자 영수증을 모든 영수증에 저장하고 있으며, 현재 영수증을 모두 저장하고 있습니다 내 드라이브 폴더를 사용자의 내 드라이브 폴더로 이동하십시오

그러나 문서 조직을보다 명확하게 만들 수 있습니까? 그러나 조직을 조금 더 조직화하고 싶다면 어떻게해야합니까? 드라이브 파일 선택기를 시작할 수 있습니다 사용자가 드라이브를 실행하여 영수증을 사용하도록 영수증을 저장하도록 선택하려면 폴더 파일 선택기 사용자가 폴더를 선택하면 로컬 선택 폴더에있는 로컬 장치에 옵션을 저장하고이 기본 설정을 장치에 저장합니다 새 영수증을 만들 때마다 매번 새 영수증을 만들 때마다 선택한 폴더에 이전에 선택한 폴더에 저장합니다 마지막으로, 항목을 마지막 항목으로 설정할 수 있으면이 환경 설정이 더 좋을 것입니다

여러 장치가 일관성을 유지하면 여러 장치간에 일관성이 유지됩니다 물론 드라이브의 파일에 설정을 저장할 수 있습니다 환경 설정을 드라이브의 파일에 저장할 수 있습니다 영수증을받는 것과 같지만 그러나이 파일은 사용자의 드라이브 파일 구조가 엉망이 될 것입니다 이는 환경 설정 파일을 사용하는 사용자의 드라이브에 항상 나쁜 것입니다

Drive의 마지막 기능은 다음과 같습니다 여기에 마지막 기능이 들어 있습니다 응용 프로그램 폴더는 특별한 유형의 폴더입니다 응용 프로그램 폴더는 특수한 유형의 폴더입니다 앱에서만 볼 수 있고 관리 할 수있는 파일을 저장할 수있는 곳에서 앱만보고 관리 할 수있는 파일을 저장할 수 있습니다 이 폴더는 여전히 사용자 저장 용량을 사용하지만이 폴더는 여전히 사용자 저장 용량을 사용하며, 사용자가 더 이상 앱을 사용하지 않고 모든 폴더 콘텐츠를 지울 수있을 때 사용할 수 있습니다

앱 사용을 중지하려면 폴더의 모든 내용을 지우고, 그러나 이전 영수증 파일은 여전히 ​​존재하지만 파일은 그 길을 가지지 않습니다 이제 방금 이야기 한 내용을 살펴 보겠습니다 우리는 주로 응용 프로그램에 대해 이야기했습니다 우리는 모든 내용을 저장 한 응용 프로그램을 만들었습니다 로컬 장치의 모든 데이터를 저장하고 로컬 장치의 장치 파일에 자동 백업을 추가하고 자동 백업, 크로스 장치 오프라인 지원 및 응용 프로그램 구성 동기화 등 파일 동기화, 오프라인 지원 및 동기화 된 응용 프로그램 구성 당신은 또한 자신의 애플 리케이션에 이러한 기능을 추가 할 수 있습니다, 귀하의 애플 리케이션에 이러한 기능을 추가 할 수 있습니다, Drive Android API를 사용하여 Drive Android API를 시작하세요

자세한 내용은 developersgooglecom/drive/android (developersgooglecom/drive/android)에서 확인할 수 있습니다

나는 Jen King이며 Drive Android API를 사용하기를 기대합니다 Jen King입니다 앞으로 올 때까지 기다릴 수 없습니다 드라이브 Android API로 만든 제품

Getting the Most from the New Multi-Camera API (Android Dev Summit ’18)

안녕하세요, 모두들 새로운 멀티 카메라 API 세션에 오신 것을 환영합니다

내 이름은 Vinit Modi이고 저는 제품 관리자입니다 카메라 플랫폼에 이 잠시 후, 샌드 박스 영역 바깥으로 나 오세요 더 궁금한 점이 있으시면 새로운 API에 대해 이야기하기 전에, 카메라의 상태를 빠르게 업데이트하겠습니다 역사적으로 대부분의 카메라 앱은 기본 카메라 앱에 초점을 맞 춥니 다

장치와 함께 제공됩니다 그러나 금액의 두 배가 넘는 것으로 나타났습니다 카메라 사용량은 사용자가 구축 한 앱에서 발생합니다 그리고 당신이 새로운 기능을 지원합니다 새로운 Android API에서 사용할 수 있습니다

우리가 많은 개발자들과 이야기 할 때 우리가 찾은 것 가장 큰 문제는 카메라 2 API의 상태입니다 그리고 우리는 앞으로 나아갈 것입니다 우리는 열심히 노력해 왔습니다 Android P부터 시작하여 찾을 수있는 항목 거의 모든 새 장치가 camera2 및 HALv3을 지원합니다 이것이 의미하는 바는 카메라의 특성을 볼 때, 기기가 자체 광고를하는 것을 알게 될 것입니다

어느 한 점과 비슷한 camera2 LIMITED 촬영하고 카메라 2를 FULL로 설정하면 프레임 단위 제어와 같은 고급 기능, YUV 재 처리 및 RAW를 가능하게하는 LEVEL_3이 있습니다 또한 여러 OEM 업체와 협력 해 왔으며, 또는 제조업체가 출시 될 때 새로운 API를 열 수 있습니다 올해 Google Pixel 3 및 화웨이 메이트 20 시리즈 지원 새로운 멀티 카메라 API 자, 왜 물러서서 이유를 말해 줄까? 이 새로운 API는 매우 중요합니다 Android P 이전에는 개발자로서 물리적 센서 중 하나에 액세스 할 수 있습니다 네이티브 카메라 앱이 전체 하드웨어에 액세스합니다

능력 하지만 P로 시작하면 동일한 액세스 권한을 얻게됩니다 네이티브 카메라 앱으로 여기에는 모든 물리적 센서가 포함됩니다 논리적 인 카메라 더하기

논리적 인 카메라는 추상화입니다 당신이 쉽게 잡을 수있는 모든 물리적 센서들 하드웨어의 이점 몇 가지 새로운 사용 사례와 가능성이 있습니다 새로운 멀티 카메라 API로 오늘날 오스카 (Oscar)는 광학 줌 (optical zoom) 에밀리가 보케를 덮을거야 고맙습니다

오스카가 다음입니다 [박수 갈채] OSCAR WAHLTINEZ : 안녕하세요, 제 이름은 오스카입니다 저는 개발자 관계 팀에서 일하고 있습니다 라이브 데모에서 시작하겠습니다 무엇이 잘못 될 수 있습니까? [웃음] 그래서 여기에 메이트 20 전화가 있습니다

멀티 카메라 줌을 구현 중입니다 여기에서 우리가하고있는 일은 UI 레이어를 바꾸는 것입니다 두 카메라 스트림 나는 어떤 종류의 세부 확대 또는 자르기를하고 있지 않다 나는 단순히 시내를 교환하고있다

보시다시피, 거의 순간적입니다 내가 쓰러 뜨리면 찢어지지 않아 카메라 세션 그것은 단지 하나의 세션이고, 저는 두 대의 카메라를 교체하고 있습니다 스트림

아이디어는, 내가 말했듯이, 단일 카메라 세션입니다 – 두 개의 스트림 그리고 우리는 시내 사이에서 교환 할 것입니다, 이것이 어떻게 구축되었는지 보여 드리겠습니다 하지만 핵심 구성 요소는 동일한 코드를 사용한다는 것입니다 두 장치에서 실행 중입니다 많은 카메라 개발자들이 알고 있듯이, 그것은 아주 위업입니다 같은 다른 장치에서 동일한 코드를 실행하려면 특히 하드웨어에 묶여있는 것 그것이 멀티 카메라이기 때문에

먼저, 다중 카메라를 사용하는 방법에 대해 이야기 해 봅시다 동시에 스트림 프레임 워크가 제공하는 기본 보증 멀티 카메라 API에서 최소한 두 개의 실제 카메라를 사용할 수 있습니다 동시에 스트림 보증 된 스트림 구성을 생각해 내십시오

단일 카메라 장치 용 하드웨어 수준, 대상을 기반으로하는 일련의 규칙입니다 유형 및 대상 크기 멀티 카메라 API를 올바르게 사용한다면, 우리는이 규칙에 대한 예외를 얻을 수 있습니다 이것을 예제로 설명해 보겠습니다 YouTube에는 최대 크기의 단일 YUV 스트림이 있습니다

이전 표와 같이 하드웨어가 제한적인 장치 레벨은 단일 스트림을 사용할 수 있습니다 그 구성으로 멀티 카메라 API를 사용하면 실제로 동일한 구성의 두 스트림을 사용할 수 있습니다 기본 물리적 카메라에서 우리가해야 할 일을 따라 가자

이전에 데모 한 앱을 구현할 수 있습니다 우리는 5 단계로 나누었습니다 준비 되었나요? 1 단계 – 실제 카메라를 찾으십시오 물리적 카메라 쌍을 식별하여 시작합니다 동시에 열 수 있습니다

피사체로 카메라 문자를 사용하여, 우리는 [? 요청 기능] 논리적 인 멀티 카메라가 그들 중 하나라면, 우리는이 장치가 논리적 인 카메라라는 것을 압니다 논리적 인 카메라를 발견 했으므로 저장합니다 우리는 나중에 ID를 필요로 할 것입니다 그리고 우리는 그것과 관련된 물리적 인 카메라를 얻습니다 그런 다음 다음 단계로 넘어갈 수 있습니다

여기에 방금 설명한 내용을 시각화했습니다 우리는 논리적 인 카메라 ID를 가지고, 우리는 실제 카메라 ID를 가져오고 이제는 연관된 실제 카메라 검색 논리 카메라 그룹과 다음 단계로 논리 카메라를 엽니 다 두 번째 단계는 새로운 것이 아닙니다 우리는 카메라를 엽니 다

이전에 저장 한 논리적 카메라 ID를 상기하십시오 이것이 우리가 카메라 관리자에게 전달하는 유일한 방법입니다 다시 말하면 논리적 인 카메라 만 엽니 다 장치가 준비되면 단계 콜백이 트리거됩니다 논리적 인 카메라를 열었습니다

다음 단계에서는 출력 구성을 만듭니다 업데이트 카메라 세션을 만드는 데 사용됩니다 원하는 출력 목표마다 이전에 찾은 목록의 실제 카메라 ID가있을 수 있습니다 특정 하드웨어에서 프레임을 검색하려는 경우 카메라

자세한 내용을 살펴 보겠습니다 우리는 다음을 사용하여 출력 설정 객체를 생성합니다 우리가 원하는 출력 목표 그리고 만약 우리가 그 결과를 특정 실제 카메라를 사용하면 설정된 실제 카메라 ID API에서 ID를 전달하십시오 논리적 인 카메라를 사용하고 싶다면, 이 단계를 건너 뛸 수 있습니다

우리는 둘 다 조합 할 수도 있습니다 하루가 끝나면 목록이 있습니다 출력 구성 중 일부는 물리적 카메라와 관련이있을 수 있습니다 그 중 일부는 – 논리적 인 카메라 목표는 모든 구성을 넣는 것입니다

단일 세션 구성으로 방금 설명한대로 각 출력 구성 관련 출력 목표 및 선택적으로, 실제 카메라 ID 이제 캡처 세션을 만듭니다 새 세션을 사용하여 캡처 세션을 만드는 방법 구성 개체? 우리는 출력 구성 목록으로 시작합니다 우리가 방금 만든거야 이를 통해 세션 구성을 인스턴스화하고, 여기에는 캡처 세션 콜백이 포함됩니다 콜백에서 인스턴스를 가져옵니다

카메라 세션 만들기 우리는 그 세션 설정 객체 우리가 2 번에서 얻은 카메라 장치 논리적 인 카메라를 열었을 때 요청이있는 프레임을 보냅니다 원하는 구성으로 새 세션을 만듭니다 세션 구성 객체에서 제공되는 콜백 지금 방아쇠를 당길 것이다

그리고 나서 우리는 우리 카메라 세션을 사용할 준비가 될 것입니다 마지막 단계 요청을 캡처합니다 그런 일이 발생하면 프레임을 가져올 수 있습니다 카메라의 예를 들어 두 프레임에서 프레임을 캡처하려면 실제 카메라를 동시에 사용하면 우리가 전에 만든 세션을 가져 가라

한 쌍의 출력 대상 이 특별한 경우, 각 타겟 특정 카메라 ID와 연결됩니다 우리는 일반적으로 캡처 요청을 생성합니다 이 경우 템플릿 미리보기를 사용하십시오 우리는 평상시와 마찬가지로 출력 목표를 그것에 첨부합니다 이제 캡처 요청을 전달합니다

여기 다른 것은 없습니다 이 경우를 제외하고, 출력면 각각에서 이미지 데이터를 수신합니다 관련 실제 카메라의 캡처 요청 콜백은 한 번만 트리거됩니다 다시 한번, 캡처 요청과 같습니다 가장 큰 차이점은 완료 콜백 대신에 두 개의 시작 노출 타임 스탬프를 돌려 줄 것입니다

일반 캡처 요청에서 단 하나의 값만 가져옵니다 요점을 되짚어 보겠습니다 우리의 광학 줌 데모 우리는 물리적 카메라를 발견했습니다 우리는 그 그룹의 일부인 논리적 인 카메라를 열었습니다

출력 구성을 만들었습니다 우리 [? 인쇄?] 목록 캡처 세션을 만듭니다 그런 다음 캡처 요청을 보내 게됩니다 내가 만지고 싶었던 또 하나의 주제는 렌즈 왜곡이다

렌즈 왜곡의 고전적인 예는 어안 렌즈입니다 이것은 실제 사례가 아닙니다 설명의 목적으로 만 여기에 있습니다 모든 렌즈에는 약간의 왜곡이 있습니다 논리 카메라의 경우, 왜곡이 있다고 가정 할 수 있습니다

최소가 될 것입니다 대부분의 경우 드라이버에 의해 수정됩니다 그러나 실제 카메라의 경우 왜곡 꽤 중요 할 수 있습니다 실제 렌즈 왜곡이 설명됩니다 방사형 및 접선 계수 집합 계수는 렌즈 왜곡을 사용하여 쿼리 할 수 ​​있습니다

카메라 특성 키 관심이 있으시면 문서에 더 많은 세부 정보가 있습니다 좋은 소식은 왜곡을 수정하는 방법이 있다는 것입니다 수학을하지 않고 간단히 왜곡 보정 모드를 설정할 수 있습니다

캡처 요청에 OFF는 왜곡이 가해지지 않았 음을 의미합니다 우리가 원한다면 이것을 사용해야 할 수도 있습니다 [INAUDIBLE] 동기화와 같은 작업을 수행 할 수 있습니다 Emilie는 나중에 그것에 대해서 이야기 할 것입니다

FAST는 최선의 교정이 가능하다는 것을 의미합니다 광고 된 프레임 속도를 충족시키면서 적용됩니다 FAST 보정이 불가능할 경우, 이것은 OFF와 같을 수 있습니다 고화질은 왜곡을 의미합니다 렌즈가 허용하는만큼 수정 될 것이며 잠재적으로 프레임 속도의 비용으로

수정 모드를 지정하지 않은 경우, 그것은 FAST 또는 HIGH QUALITY 중 하나입니다 구현 세부 사항에 달려 있습니다 기본값입니다 당신은 개발자로서, 귀하의 캡처에 어느 것이 적용되었는지 확인하려면 쿼리 할 수 ​​있습니다 의뢰

시연하는 코드 스 니펫을 보자 이 렌즈 왜곡이 어떻게 고품질로 설정되었는지 우리가 정지 이미지 캡처를 원할 것입니다 우리가 이미 카메라 세션을 시작했다고 가정하면, 캡처 요청 빌더를 인스턴스화합니다 원하는 템플릿을 사용합니다이 경우, 내가 말했듯이, 이미지 캡처

그런 다음 카메라 특성을 사용합니다 고 품질 왜곡 보정을 결정하는 방법 모드를 사용할 수 있습니다 이제 우리는 우리가 높은 품질을 가지고 있음을 알게되었습니다 왜곡에 대한 수정, 우리는 캡처 요청에 그것을 설정, 그리고 우리는 항상 우리가하는 일을합니다 – 포획 요청을 파견하십시오 샘플 코드 및 기술 세부 사항은, 우리의 블로그 게시물을보십시오

우리는 이것과 그 이상을 다뤘습니다 우리는 이번 주 초에 그것을 출판했습니다 그리고 지금, 나는 Emilie에게 그것을 넘겨 줄 것이다 [박수 갈채] 고마워, 오스카 제 이름은 Emilie Roberts입니다

저는 파트너 개발자 옹호자입니다 멋진 데모를 보여 드리겠습니다 이 다중 카메라 API 중 일부를 사용합니다 픽셀 3에 보케 효과를 적용합니다 그래서 우리는 실제로 3 개의 – 잘, 2 개의 데모를 가지고 있습니다

25 데모 첫 번째는 하나의 캠 데모입니다 멀티 카메라가 전혀 없습니다 그러나 나는 그 메커니즘을 보여주기를 원했다

보케 효과를 만들기위한 것입니다 그런 다음 듀얼 캠 데모에 들어가면 정확히 볼 수 있습니다 – 멀티 카메라 측면에 집중할 수 있습니다 보케 효과 자체에 대해 그렇게 걱정하지 않아도됩니다 그리고 곧 출판 될 예정입니다 오픈 소스

너무 많은 코드를 낙서하는 것에 대해 걱정하지 마십시오 그럼이 전화에 갈 수 있을까요? 데모 실례합니다 오키 그래서 우리는 – 나는 이것을 올바르게 설정하지 않았다

좋아, 싱글 캠 보케 효과를 보자 셀카를 여기로 데려가 그리고 당신이 화면에서 볼 수 있다고 생각합니다 그것은 내 얼굴을 찾는 것입니다 그것은 그것을 절단하고 있습니다

최종 결과를 높이 보자 그리고 그것은 거기에 인물 사진 모드를 붙이는 것 이것은 거친 인물 사진 모드의 일종입니다 그리고 이것에 대한 최적화가 있습니다 그게 어떻게되는지 보자

여기서 출력 단계를 보여 드리겠습니다 그래서 전경을 찾는 더 나은 일을하려고합니다 이봐, 그렇게 나쁘지 않았어 전경 이미지, 배경, 그것은 단색이고 조금 흐려져 있습니다 어서, 애플 리케이션

우리를 실망시키지 마라 최종 결과에 붙여 넣기 한 대의 캠에 비해 그렇게 나쁘지 않습니다 듀얼 캠 데모를 사용해 봅시다 그리고이 무대 조명으로 저는 확신하지 못합니다

어서 이봐, 나쁘지 않아 우린 잘하고있어 따라서 왼쪽 하단에 깊이 맵이 생성 된 것을 볼 수 있습니다 전경에서 나를 감지하고있는 코너 너희 모두의 나머지는 조금 쭈그러 들었다

가까운 사람들이 회색임을 알 수 있습니다 그리고 나서 검은 색이 바로 뒤로갑니다 또한 혼란을 야기하는 빛을 볼 수 있습니다 마지막 결과를 보여 드리겠습니다 분명히 일어날 수있는 몇 가지 최적화가 있습니다

하지만 꽤 잘 작동합니다 다시 한번, 이는 Pixel 2에서 두 개의 전면 카메라를 사용하고 있습니다 한 번에 두 개의 스트림을 볼 수 있습니다 죄송합니다 이 연결이 다시 연결됩니까? 아니

어쨌든, 한 번에 두 스트림 광각 렌즈 및 법선 렌즈 같은 시간에 슬라이드로 돌아갈 수 있을까요? 그럼 우리가 어떻게하는지 이야기 해 봅시다 오, 우리가있다 어쨌든, 그래서 우리는 정상적인 카메라를 가졌습니다

광각 렌즈는 동시에 작동합니다 다시 말하지만, 우리는 이것을 아마도 GitHub에 게시 할 것입니다 오픈 소스이므로 소스 코드를 파헤쳐 최적화 할 수 있습니다 더 나아지게하십시오 첫 번째 경우는 단일 캠입니다

빨리 살펴 봅시다 떠 다니는 머리 보케 효과 나는 그것을 부릅니다 우리는 얼굴 탐지 장치로 사진을 찍을 것입니다 우리는 두 장을 만들 것입니다 그래서 배경, 전경이 있습니다

환상적인 배경 효과를 내기 그 플로팅 헤드를 속한 곳에 붙여 넣으십시오 Face2는 Camera2 API에 내장되어 있습니다 코드를 구현하는 것은 매우 쉽습니다 우리가하고 싶은 일은 카메라를 점검하는 것입니다 카메라 장치가 지원하는지 확인하기위한 특성 FaceDetect

그럴 경우 원하는 모드를 찾으십시오 떨어져 있고, 그 다음 간단하고, 가득하다, 카메라 장치에 따라 다릅니다 그런 다음 카메라 캡처 요청을 할 때, 우리는 요청에 그 것을 포함시킵니다 우리가 결과를 얻을 때, 당신은 모드가 설정된 경우 얼굴을 찾았습니까? 이 예에서는 검색 만합니다 그것이 찾은 첫 번째 얼굴은 제가 사용했던 얼굴입니다

우리는 이것을 확장하여 여러면을 가질 수 있다고 상상할 수 있습니다 그냥 메모 – FaceDetect 정말 얼굴을 잡아 그래서 나는 그 경계들을 조금씩 부딪쳤다 그래서 머리가 잘려나 간다 그것은 나쁘게 들린다

배경에 붙여 넣기되는 머리 재미있는 배경 효과에 대해 이야기 해 봅시다 그래서 여기서 원하는 것을 할 수 있습니다 나는 몇 가지 일을했다 먼저 RenderScript를 사용하여 배경에 흐리게했다

멀티 카메라 이야기이기 때문에, 일부 카메라에는 수동 줌이 있습니다 다중 캠으로 작업한다면, 당신은 다른 카메라로 배경을 할 수 있습니다 초점을 벗어나는 방식으로 확대 / 축소 할 수 있습니다 따라서 실제로 광학 흐림을 할 수 있습니다 멋지다

그리고 또한 멋지다 소프트웨어 단계를 저장하십시오 이 데모에서는 사용자 정의 소프트웨어 세피아 효과도 수행했습니다 RenderScript를 사용합니다 하지만 멀티캠을 다시 사용한다면 많은 카메라가 필요합니다

단색이나 세피아 같은 효과를 내장하고있다 캡처 요청에 쿼리하고 포함 할 수 있습니다 게다가 이전에 RenderScript를 사용하지 않았다면, 이런 식으로 보입니다 흐림 효과 때문에 우리는 가장 신경을 쓴다

중간 선 3 개 정도 그리고 내장 스크립트, 본질적인 흐림입니다 그것은 꽤 편리합니다 기본적으로 상자에서 작동합니다 이 경우 상자 외부에서 흐려집니다

상자가 흐릿하지 않기 때문에 세피아 효과를위한 사용자 지정 RenderScript 스크립트입니다 처음 세 줄에서 볼 수 있습니다 기본적으로 우리는 입력 빨강, 녹색, 및 파란 채널, 색깔을 음소거하는 종류, 그들을 조금 노랗게 만들고, 그들을 보내는 출력 채널에 연결합니다 오키

그래서 우리는 배경을 가지고 있습니다 이 멋진 보케 효과가 있습니다 포 그라운드로 무엇을할까요? FaceDetect에서 우리는 얼굴을 잘라 냈습니다 그리고 우리는 PorterDuff를 선형 그래디언트로 적용합니다 가장자리를 약간 부드럽게 만드십시오

그래서 우리가 그것을 붙여 넣을 때, 그것은 그 거친 라인이 아닙니다 그리고 타다 붙여 넣기하면 상황이 꽤 좋아 보입니다 몇 가지 최적화가 있습니다 하나는 GrabCut 알고리즘을 사용하여 본 것입니다

이것은 OpenCV, Open Computer Vision 라이브러리에 내장되어 있습니다 우리는 깊이 맵 데모를 위해 나중에 사용하고 있습니다 기본적으로 나는 얼굴을 발견했다 그리고 조금 더 큰 사각형을 선택했습니다 시체가 어디 있는지 추측하려고합니다

그리고 나서 그랩 컷이 최선을 다합니다 좋아하는 사진 편집기의 Magic Wand 도구처럼 – 전경을 실제 전경으로 축소시키는 것 범위 앞에서 언급했듯이 여러 얼굴을 추가 할 수도 있습니다 이제, 당신이 모두 기다리고있는 순간 깊이지도가있는 듀얼 캠 보케에 대해 이야기 해 봅시다

우리는 카메라에 동시에 사용할 것입니다 그리고 우리는 깊이를 만들 것입니다 지도, 어려운 부분입니다 나는 그것을 굵게 강조했다 그런 다음 동일한 메커니즘을 사용합니다

우리는 이미 이야기했다 오키 이게 어떻게 작동합니까? 우선, 이중 캡처 그래서, 왼쪽에, 나는 애완 동물과 어울리고있다 집에서

왼쪽은 Pixel 3 전면 카메라의 일반 카메라입니다 그리고 오른쪽은 광각 촬영입니다 그것을하기 위해서, 오스카가 걸었던 것처럼, 여러 출력 구성을 설정했습니다 그래서 각 렌즈에 대해 우리는 여기, 우리는 이전의 표면뿐만 아니라 이미지를 가지고있다 정상 렌즈 용 판독기

우리는 정상적인 렌즈에 설정된 실제 카메라 ID를 사용합니다 그리고 우리는 광각 렌즈에 대해서도 똑같은 작업을합니다 따라서 우리는 4 가지 출력 설정으로 끝납니다 우리의 구성에 투입 그때부터 – 또는 거기에서, 그것은 단지 캡처를위한 출력 목표를 선택해야합니다

이 경우, 우리는 그 사진들을 원한다 그래서 우리는 그들을 조작 할 수 있습니다 그래서 우리는 정상적인 렌즈에서 이미지 리더를 원한다고 말합니다 및 광각 렌즈를 포함한다 좋아, 그래서 우리는 우리의 이미지를 가지고있다

이제 수학과 마법을 다해야합니다 그 bokeh 효과가 일어나게하십시오 나는 스테레오 비전에 대해 간략히 소개하고자한다 우리가 모든 코드에 들어가기 전에 하지만 나는이 슬라이드를 보면서, 이 슬라이드를 작업하면서 조금 지루해졌습니다

나는 기하학을 좋아하지만, 그것은 많은 편지입니다 P는 어쨌든 무엇을 의미합니까? 분명히, 그것은 초콜릿 더미입니다 P는 초콜릿 더미를 나타냅니다 그리고 이것이 우리가 집중하게 될 것입니다 이 데모의 나머지 부분에 관해서

그리고 카메라 하나는 조금 지루한 카메라입니다 여기 S는 상어로 바꿀 것입니다 내 친구, Pepper the Shark입니다 그리고 H는 하마입니다 그래서 이들은 우리의 도우미입니다

우리가 스테레오 비전에 관해 이야기하는 것을 도울 것입니다 왼쪽 카메라, 보통 렌즈는 상어 후추입니다 광각 렌즈는 소파 하마 인 Susie Loo입니다 그리고 그들은 그 두꺼운 초콜릿 뭉치에 두 가지 모두 들어가고 있습니다 그리고 이미, 그것은 훨씬 더 재미 있습니다

나는 당신이 동의하기를 바랍니다 그래서 그곳에는 왜곡 된 직사각형들이 있습니다 그것은 2D 표면입니다 그것은 카메라가 포착 할 이미지와 같습니다 즉, 2D 표현 우리가 가진 실제 살아있는 3D 물체의 어떻게 생겼는지 살펴 보겠습니다

상어의 시선이 바로 거기에 있습니다 아몬드, 바다 소금, 다크 초콜릿, 하마 캠은 라스베리 크런치에 집중합니다 그래서 그들은 같은 3D 객체를보고 있습니다 그러나 그들은이 2D 표현을 가지고 있습니다 우리가 정말로하고 싶은 것은 별도의 견해를 취하는 것입니다

그들을 결합 할 수 있으니 조금만 더 그 2D보기보다 더 많은 정보 훌륭한 깊이 맵을 만들 수 있어야합니다 그래서 우리는 다시 정상적인 시야, 넓은 시야각을 갖습니다 이 경우에는 둘 다 정상입니다 그러나 왼쪽, 오른쪽 오버레이 서로에게 당신은 그런 종류의 3D 눈금자 효과를 얻습니다 내가 희망하는 초등학교에서

당신은 어린 시절 즐겁게 지내야합니다 그리고 거기에서 우리는 깊이 맵을 만들 수 있습니다 당신이 굉장한 bokeh와 같은 정말로 시원한 물건을하는 것을 허락하는 효과뿐만 아니라 초콜릿이 얼마나 멀리 있는지 알 수 있습니다 그래서 분명히 손을 뻗어 잡을 수 있습니다 오키

그 두 대의 카메라, 두 장의 사진, 서로 다른 방향에있다 그리고 그들은 공간에서 분리되어 있습니다 그래서 우리는 서로를 꼭대기에 올려야합니다 이것이 우리가 카메라 외재라고 부르는 것입니다 두 카메라가 서로 어떻게 관련되어 있는지

그래서 우리는 각각의 이미지들을 회전시키고 번역 할 필요가 있습니다 그래서 그들은 서로의 위에 나타납니다 일반적으로 우리는 일반적으로 회전 및 평행 이동 매개 변수를 제공합니다 세계와 관련된 카메라 카메라 1 대 세계 대신, 우리는 상어와 세계와 하마가있다

그러나 우리가 스테레오 비전을 수행 할 때 우리가 실제로 Shark to Hippo는 걱정할 필요가 있습니다 그렇다면이 두 카메라는 어떻게 서로 관련이 있습니까? 좋은 엔지니어처럼, 내가 아는 전부는 나는 하마를 World to Hippo로 전환해야합니다 그리고 이제 저는 상어에서부터 세계에 이르기까지 하피에 이르는 통로가 있습니다 그게 수학에 대한 재미있는 소개 였으면 좋겠어 위키피디아에 대한 모든 것을 읽을 수 있습니다

이런 모습 회전 행렬을 얻으려면 카메라 2의 회전 행렬을 역으로 변환하려고합니다 카메라 1과 교차 곱합니다 그리고 번역을 위해, 그것은 이와 같은 것입니다 내부 제품을 가지고 빼십시오

Wikipedia 또는 다른 출처에서이 모든 것을 읽을 수 있습니다 그래서 내가 지적하고 싶은 것은 이 일을 직접하고 있다면 번역이 있습니다 일반 카메라의 픽셀 3에 대한 행렬 와이드 카메라 이것은 내가 꺼낸 것입니다 그것에 대해 무엇을 눈치 챘 을까요? 카메라들 사이의 9 밀리미터 간격 약 오른쪽에 보인다

전화를 보면, 좋은 점이 있다는 것을 알 수 있습니다 미국인은 뭐니? 좋은 어쨌든 좋은 9 밀리미터가 있습니다

그 카메라들 사이에 그건 완벽하게 이해가됩니다 하지만 내가 눈치 채지 못한 것은 약 1 주일의 시간을 들여야합니다 그것이 y 좌표에있는 것입니다 그래서 카메라는 서로 위에 있습니다

그래서 저는이 전화로 일하는 동안, 서로 옆에있는 두 대의 카메라를보고, 나는 그들이 분명히 그들이라고 생각했다 수평으로 옮겨졌다 중요한 점은, 깊이 맵 기능 내가 사용하고있는 것은 그들이 서로 옆에있을거야 수평 이동을 가정합니다 그래서 당신은 – 왜냐하면

오, 나는 중요한 부분을 말하지 않았어 카메라 센서는 종종 풍경, 그것은 의미가 있습니다 잘못했을 경우 깊이지도가 작동하지 않습니다

너는 머리카락을 꺼내 내가 한 것처럼 위대한 주를 보내 셨습니다 어쨌든, 만약 당신이 이것을 구현한다면 단지 메모 그래서 우리는 카메라 외재를 가지고 있습니다 우리가 서로의 위에 카메라로부터 그림을 얻는 방법, 서로 어떻게 관련되어 있는지

카메라 내장 함수는 카메라 자체의 속성입니다 그래서 우리는 일반 렌즈와 광각 렌즈를 가지고 있다는 것을 알고 있습니다 그리고 그들은 다른 속성을 가지고 있습니다 그래서 두 가지가 있습니다 하나는 카메라의 특성입니다

이것은 초점 길이, 주축, 그리고 그 축이 어떤 이유로 왜곡 된 경우 이것은 종종 3 행 3 행렬에 나타납니다 그리고 왜곡 – 광각 렌즈와 광각 렌즈 – 특히 가장자리 근처에서 약간의 왜곡이 생길 것입니다 우리가 매핑 할 때 고려해야 할 사항이 있습니다 두 이미지는 서로에게

또 다른 메모 – 그래서 우리는 내장 된 왜곡을 사용할 것입니다 이미지를 왜곡되지 않게하기위한 렌즈의 특성 그러나 오스카가 우리에게 말했듯이, 기본적으로, 카메라가 이미지를 왜곡시킵니다 그래서 우리는 그것을 찌그러 뜨릴 것입니다 reundistort, 그것은 우리가 실제로 그것을 왜곡 할 것이라는 것을 의미합니다, 그것은 나쁜 소식입니다

따라서 실제로 왜곡 보정을 해제해야합니다 당신이 깊이지도를 원한다면 카메라 요청으로 충분히 쉽습니다 왜곡 모드가 해제되어 있는지 확인합니다 오키

여기 네 가지가 있습니다 회전, 평행 이동, 카메라 특성 행렬, 및 렌즈 왜곡 이 속성들을 어떻게 얻습니까? 꽤 쉽습니다 너는 오후 내내, 바둑판 용지를 인쇄해라 이 방에서 전에 이걸 했니? 카메라 라

– 응? 재미 있겠지? 카메라 교정 두 카메라 모두에서 일련의 사진을 찍으십시오 당신은 많은 알고리즘을 실행합니다 이 네 가지 카메라 특성을 알아 냈습니다

그리고 그때부터 깊이지도를 만들기 시작할 수 있습니다 카메라에서 당신은 내 쾌활한 얼굴에서 말할 수 있습니다 실제로 그 재미가 아닙니다 하지 마

별로 좋지 않다 다행히 카메라 2 멀티 카메라 API에서, 우리는이 위대한 들판을 가지고 있습니다 회전, 평행 이동, 교정 및 왜곡 따라서 API를 바로 사용할 수 있습니다 네가 간다면 몇 마디 만 말해 줄께

자신을 구현합니다 그래서 카메라의 특성, 초점 거리, 액세스 정보는 다섯 개의 매개 변수로 제공됩니다 이것은 Android 설명서에 있습니다 그러나 3×3 행렬을 생성하려면, 당신은 단지 문서를 따라야 만합니다 번호를 플러그인하십시오

너를 버릴지도 모르는 또 다른 일 왜곡 계수는 다시 5 가지 값입니다 그러나 OpenCV 라이브러리는 다른 순서로 사용합니다 API에서 얻은 값보다 따라서 0, 1, 3, 4, 2가되는지 알아야합니다 희소식은 당신이 0, 1, 2, 3, 4 주문, 당신이 이미지를 왜곡하지 않을 때, 그들은 마치 소용돌이에 빠져있는 것처럼 보입니다

따라서 여러분은 이러한 계수에 잘못된 것이 있다는 것을 확신합니다 어쨌든, 일단 우리가 모든 매개 변수를 갖게되면, 우리는 우리 이미지를 준비하기 시작할 수 있습니다 깊이 맵 비교를 할 수 있습니다 이건 내 부엌에있는 나야 그리고 네가 거기에서 볼 수 있는지 모르겠다

하지만 천장을 보시면 거기에 어떤 종류의 커브가 있음을 주목하십시오 우리는 재미있는 집에 살지 않습니다 우리가 말하고있는 왜곡 효과입니다 왜곡 보정 기능이 해제 된 광각 렌즈를 사용하십시오 두 이미지를 비교할 때도 마찬가지입니다

직선들 – 우물과 곡선 선들 – 각 이미지에 줄을서야합니다 당신이 깊이지도를 만들 때 우리는 그것을 정류라고 부릅니다 그리고 우리는 카메라 특성을 사용합니다 그것은 구부러진 지붕을 보여주는 것입니다

이 모든 기능은 OpenCV 라이브러리에 있습니다 Open 컴퓨터 비전 라이브러리 첫 번째는 Stereo Rectify입니다 이것은 우리에게 일련의 매개 변수를 가져옵니다 이 계산을 수행하는 데 사용할 수 있습니다

그래서 우리는 – 죄송합니다 API에서 얻은 값, 카메라 매트릭스, 왜곡 계수, 회전 및 평행 이동 우리가 전에 계산 한 것 우리는 이러한 매개 변수를 제거하고, 우리는 변형되지 않은 수정 맵을 호출합니다 우리에게 말하는 방법을 알려주는지도를 만든다 이 두 개의 서로 다른 카메라에서 두 개의 이미지를 가져올 수 있습니다

그들을 서로에 매핑하십시오 그리고 Remap 기능은 바로 이것을합니다 그럼 그게 우리에게주는 것을 보자 여기 왼쪽에서 다시 정상적인 캠, 앞쪽 캠, Pixel 3의 광각 렌즈 및 Pixel 3의 광각 렌즈 당신은 그들이 꽤 잘 어울리는 것을 볼 수 있습니다

상어 줄이 줄 지어 있습니다 작물에 대한 권리입니다 넓은 각도에는 더 많은 수확 지역이 있습니다 그게 전부 줄 지어있다 지붕 라인, 도어 라인은 직선입니다

엉뚱한 왜곡이 없습니다 그리고 실제로, 나는 당신이 앉아있는 곳에서, 당신은 아마 밀접하게보아야 만합니다 왼쪽 그림이 조금 더 가깝다는 것을 알기 위해 프레임의 왼쪽에 그래서 그들은 실제로 조금씩 상쇄됩니다 두 대의 카메라가 있다면 무엇을 기대할 것인가 9 밀리미터 간격

그래서 우리는 이미지를 얻었다 우리는 왜곡되지 않았습니다 우리는 그들을 바로 잡았습니다 우리는 깊이 맵을 작성하는 데 아주 가깝습니다 깊이 맵 기능을 호출하면됩니다

우리는 stereoBM 또는 stereoSGBM을 사용합니다 하나는 다른 것보다 몇 가지 매개 변수가 있습니다 오픈 소스 데모로 게임을 할 때, 이 매개 변수가 어떻게 작동 하는지를 볼 수 있고, 최적화, 변경 사항 커밋, 그 앱을 더 잘 만드는 데 도움이됩니다 그리고 우리는 계산을 호출하고이 깊이 맵을 만듭니다 그리고 그렇게하면 놀라운 사진을 얻을 수 있습니다

이렇게 실제로, 때로는 그것보다 훨씬 나아 보입니다 하지만 어쨌든 이것은 우리가 함께 일하기를 원하는 것이 아닙니다 우리가 정말로하고 싶은 것은 필터입니다

이 경우, 가중치 최소 제곱 필터를 사용하여 그것을 부드럽게하고 조금 더 유용한 깊이를줍니다 지도 따라서 우리가 데모에서 본 어두운 픽셀은, 더 먼 사람들입니다 흰색 픽셀이 가까운 픽셀입니다 그리고 아마도 조금보기가 어려울 것입니다

상어의 주둥이와 하마의 주둥이를 볼 수 있습니다 조금 회색으로 변했다 그래서 실제로 어느 정도 거기에서 일하고 있습니다 필터를 호출하는 방법입니다 OpenCV 라이브러리에도 포함되어 있습니다

기여 모듈에서 그것은 모두 오픈 소스입니다 그리고 정말 멋집니다 완벽한 깊이 맵을 얻으면 기분이 좋아집니다 좋아, 여기서 우리는 깊이 맵을 가지고있다

우리는 무엇을 할 것인가? 따라서이 깊이 맵을 마스크로 적용 할 수 있습니다 그리고 검은 영역, 우리는 페이드 아웃하고 싶습니다 전경을 강조하고 싶습니다 PorterDuff을 사용하면 꽤 쉽습니다 결과는 이와 같습니다

실제로 전경이 더 많이 존재합니다 그런 다음 배경이 희미합니다 개인적으로 나는 높은 기준을 가지고있다 반투명 플로팅처럼 보입니다 내 어깨 너머에 상어

내 얼굴이 조금 희미 해지고 내 안구가 없어 졌어 그래서 저는 이것을 통해 큰 또 하나의 붉은 색 X를 넣고 말할 것입니다 충분하지 않습니다 좋은 시작입니다 그러나 우리가 정말로 원하는 것은 이것과 같은 깊이 맵입니다

그래서 우리는 깊이 맵에 어려운 문턱을 놓을 것입니다 전경, 배경을 결정합니다 다른 앱에서는 비슷한 것을하고 싶을 수 있습니다 그러나 어쩌면 그렇게 가혹한 차이는 아닙니다 더 부드러운 곡선이 될 수 있습니다

이를 위해 OpenCV 함수 인 임계 값을 사용할 수 있습니다 우리는 그만한 가치를 부여합니다 앱의 경우 255 개에서 80 ~ 140 개 정도입니다 그리고 그것은 무엇인가가 고려되는 바로 그 한계입니다 전경 또는 배경

너를 위해 이것의 구현 내가 너에게 보여준 것처럼 마스크를 적용했을 때, 당신은 실제로 그 검은 픽셀을 돌릴 필요가 있습니다 투명 픽셀로 따라서이 함수는 모든 검은 색을 투명하게 변환합니다 우리가 간다

거의 다 왔어 그래서 저는이 슬라이드에서 한 가지만 기억하고 싶었습니다 중간 그림 – 내 눈이 조금 어둡다는 것을 알 수 있습니다 3 개의 슬라이드 이상을 기억하십시오 그래서 우리는 초기 그림을 가지고 깊이지도를 얻었습니다

우리는 그것에 대한이 어려운 문턱을합니다 그리고 배경을 다시 만들 수 있습니다 첫 번째 데모에서했던 것처럼, 그것을 흐리게하고 단색으로 그 전경을 잘라냅니다 붙여 넣기에 필요한 모든 조각이 있습니다 그리고 이것은 우리의 놀라운, 마지막, 인물 사진입니다, 그것은 꽤 좋다

나는 그것을 자랑스럽게 생각합니다 그럼 최적화에 대해 이야기 해 봅시다 내가 말하고있는 안구를 기억해? 그래서 어떤 종류의 반짝 반짝 빛나는 이 현재 반복에서 엉망이 될 수있다 응용 프로그램의 또는 밝은 빛이 깊이 맵 생성을 버릴 수 있습니다 그래서 최적화를 한 번했습니다

FaceDetect 영역이 있어야합니다 나는 전경에서 얼굴을 원한다고 확신한다 그래서 나는 그것을 사용하고 그것을 단호하게 잘라 말했습니다 얼굴에있는 모든 것이 전경에있게 될 것입니다 그래서 내 이빨과 내 눈처럼 보호 받았다

그 마스킹 아웃 효과에서 네가 알아 차렸는지 모르겠다 내가 돌아갈 수 있을까? 내 퍼지 붉은 머리카락과 빨간 소파 – 거기 우리는 간다 그들은 종류가 섞여있다 그리 블 컷을 사용할 수 있다고 생각합니다

정확하게 알아내는 것의 조금 더 나은 일을하는 것 전경에 뭐가 있는지 고마워 우리는 이것이 당신에게 깊은 잠수함을 준 것을 정말로 희망합니다 카메라 2와 멀티 카메라 API를 사용하여, 당신에게 흥미 진진한 창의적인 아이디어를 제공합니다

우리는 당신의 아이디어를 정말로 듣고 싶습니다 우리는 앱에서 그들을보고 싶습니다 그리고 우리는 또한 당신이 찾고있는 기능을 알고 싶습니다 우리는 그들이 위대하다고 생각합니다 카메라 생태계를 계속 추진하고 정말 생태계가 점점 더 커지고 있습니다

다시 한번 고마워 그리고 샌드 박스, 카메라 샌드 박스, 질문이 있으시면 후속 조치를 원할 경우이 앱을 사용해보고 싶습니다 작동하는지 확인하십시오 그리고 곧 오픈 소스를 찾으십시오 고마워

[박수 갈채] [음악 재생]

GAPID Graphics Debugger (Android Game Developer Summit 2018)

벤 클레이튼 : 안녕하세요, 저는 벤입니다 나는 잘 생겼어

이것은 파스칼입니다 파스칼은 또한 그것에 대해 거의 작업하고 있습니다 내가 가진 한 그래서이 슬라이드는 아마 지금은 조금 무의미합니다 GAPID, 오픈 소스, 개발 된 GL ES 및 Vulkan을위한 열린, 추적 및 재생 도구 현재 디버거입니다

많은 그래픽을 진단하고 수정하는 데 사용할 수 있습니다 게임 개발시 문제 우리는 현장에서 사용 해왔고 아주 바보 같은 것을 발견했습니다 일부 게임 엔진들 그렇지 않으면 완전히 숨겨 질 것입니다 개발자로부터

그것은 크로스 플랫폼입니다 Windows, Mac Linux를 실행하며 디버깅 할 수있는 Android 애플리케이션을 추적하는 데 사용할 수 있습니다 Vulkan에게는 실제로 데스크톱도 지원합니다 Windows에서 Vulkan 응용 프로그램을 추적 할 수 있습니다 또는 Linux, 분명히 Mac이 아닙니다

그리고 네, 지금 가서 다운로드 할 수 있습니다 GitHub에 있습니다 따라서 githubcom/google/gapid, 그런 다음 릴리스를 살펴볼 수 있습니다 그래서 그것에 대해 이야기하는 대신에, 결국 그래픽입니다

뿐만 아니라 몇 가지 물건을 보여줍니다 그래서 파스칼에게 가져 가겠습니다 파스칼 뮐러 : 그래, 우리가 처음 시작할 때, 이 시작 대화 상자가 나타납니다 캡처와 같은 가장 일반적인 작업을 빠르게 수행 할 수 있습니다 및 추적

마우스를 볼 수 있는지 보겠습니다 캡처, 추적 대화 상자 추적 할 API를 선택합니다 그리고 GL을 추적합니다 Android 기기를 선택할 수 있습니다

우리는 USB 포트가 부족하기 때문에, 우리는 실제로 추적을하지 않을 것입니다 그것은 또한 꽤 지루합니다 APK를 선택하십시오 몇 가지 옵션이 있습니다 그리고 파일을 추적 할 수 있습니다

하지만 대신에 이전에 찍은 흔적을 열어 두겠습니다 이것은 Google의 유일한 게임 인 Sushi, Android에서 상단에서 캡처 된 프레임을 볼 수 있습니다 프레임의 일부 프레임 미리보기가 표시됩니다 이것은 대부분 메뉴에 지나지 않습니다 우리가 더 흥미로운 것을 발견 할 수 있는지 봅시다

신청서의 시작 왼쪽 하단에는 모든 명령이 표시됩니다 그리고 프레임 단위로 그룹화하고 콜을 그렸습니다 그리고 애플리케이션에 디버그 마커를 포함시키는 경우 여기에 표시되는 디버그 마커가 표시됩니다

우리는 모든 그룹을 볼 수 있습니다 이것은 나를 위해 작은 것입니다 예를 들어 프레임을 한 단계 씩 이동할 수 있습니다 어떻게 그것이 둘 다 일어나는 지보십시오 여기에 그룹화 된 모든 그리기 호출이 표시됩니다

물론 실제 그리기 호출도 볼 수 있습니다 하지만 전화를 받아야 할 수도 있습니다 하지만 분명히 우리는 또한 GL 드라이버 상태의 나머지 부분 예를 들어, 형상을 볼 수 있습니다 그것은 여기 렌더링되었습니다

이것은 단지 약간의 잎이다 여기에 새우 초밥을 골라 드리겠습니다 좀 더 흥미로운 지오메트리를 볼 수 있습니다 예를 들어, 법선을 디버깅 할 수 있습니다 그들이 좋아 보이지 않는다면

형상을 검사 할 수 있습니다 이 무승부에 하나가있었습니다 또한 모든 텍스처를 검사 할 수 있습니다 그래서 우리는 사용 된 텍스처를 봅니다 그리고 이것은 또한 당신에게 내용을 보여줄 것입니다

렌더링 된 타겟 텍스처가 정말 멋지다 일반적으로 그림자를 렌더링해야합니다 화면에지도 여기에서 검사 만하실 수 있습니다 그리고 우리는 당신과 같은 이미지 도구를 가지고 있습니다

채널을 비활성화 할 수 있으므로 다시 섀도우 맵에 유용합니다 다른 채널에 대해 다른 값이 있습니다 확대하고 검사 할 수 있습니다 물론 셰이더를 보여줍니다 그리고 우리가 할 수있는 일 중 하나 빠른 프로토 타이핑입니다

차광 할 문제가있을 때마다 그늘을 더하고 있습니다 너는 그것을 구할 수있다 응용 프로그램을 다시 빌드해야합니다 그런 다음 패키지를 패키지로 만들어 장치에 배포해야합니다

단지 당신이 그 점 0 또는 무엇을 잊어 버린 것을 알아내는 것입니다 그래서 여기에서 쉐이더를 편집 할 수 있습니다 여기에 내가 전에 구한 것을 붙여 넣으십시오 변경 사항을 푸시합니다 몇 초 후에 변경 사항을 볼 수 있습니다

그 일이 일어나고 우리의 Skybox가 멋진 일몰으로 변하게됩니다 빨간 모든 프레임에서 변경되었음을 알 수 있습니다 우리는 작은 하늘 상자를 멋지고 붉은 색으로 바 꾸었습니다 우리는 GL 드라이버의 전체 상태를 추적했습니다

추적의 어느 시점에서든 검사 할 수 있습니다 문제가 발생하여 원하는 경우 이 시점에서 계획 상태가 무엇인지 알기 위해, 당신은 들어가서 추적을 조사 할 수 있습니다 비행기 상태를 볼 수 있습니다 (예 : 여기 프레임 박스는 여기에 있습니다 설정 한 모든 값을 볼 수 있습니다 오, 이건 달라야합니다

우리는 또한보고 시스템의 시작을 가지고 있습니다 예를 들어, 오류를 추적합니다 감옥 오류 – 감옥 추적 오류가 발생합니다 여기에 예를 들어 설명하겠습니다 명령에 빨리 갈 수 있습니다

그리고이 get integer가 흥미있는 식별자를 가지고 있음을 보아라 존재하지 않습니다 그리고 우리는 다른 것들에 대해서도 계획하고 있습니다 우리가 당신의 흔적에서 발견하고 당신을 줄 수있는 하루를 어떻게 향상시킬 수 있는지에 대한 실용적인 피드백 나는 그것의 대부분을 다루고 있다고 생각합니다

BEN CLAYTON : 기억을 시도 했습니까? 파스칼 뮐러 : 분명히, 어떤 명령에 대해서는, GL 유니폼과 같은 것을 찾아 보자 기억을 보는 것은별로 흥미롭지 않습니다 바늘 그래서 우리는 분명히 기억을 추적합니다 그리고 어떤 기억이 통과되었는지 알 수 있습니다

그리고 [INAUDIBLE]에서 포맷 할 수 있습니다 여기에서 여러분은 그 행렬을 볼 수 있습니다 이 유니폼에 전달되었습니다 BEN CLAYTON : 메모리는 일종의 전동 공구입니다 그러나 선택한 특정 명령에 대해 당신은 그 모든 메모리를 볼 수 있습니다

명령에 의해 읽거나 썼다 그 시점에서 하나씩 벗어나는 오류에 유용합니다 그래, 그게 지금 그 도구에요 다른 몇 가지 그는 GL에 여러 맥락을 넣었습니다

맨 위에있는 바, 기본적으로, 가장 관련성이 높은 문맥을 고려 특정 게임 하지만 많은 엔진의 경우 스핀 업되는 다중 컨텍스트 그래서 그들 사이를 볼 수 있습니다 인터리빙 된 컨텍스트 모드에 대한 옵션으로서, 그래서 문맥이 어떻게되는지 볼 수 있습니다 그들 각각과 이야기하는 것

하지만 그래, 그게 우리가 지금하는 일이야 그런데 질문이 있으면, 방해해서는 안됩니다 파스칼 뮐러 : 예 청중 : 고해상도 CPU 타임 스탬프가 있습니까? 이에? 때로는 코드가 CPU 측에서 무엇을하는지 알고있는 것이 좋습니다 프레임을 만들 때

벤 클레이튼 : 현재, 아니 우리는 타임 스탬프와 같이 여분의 메타 데이터를 넣고 싶었습니다 정보 우리는 그 유용성에 관해서 울타리에 서있다 추적을하면 시간이 왜곡되기 때문입니다

따라서 실시간 정보를 갖는 것은 약간의기만 행위가 될 수 있습니다 그러나 스택 추적 정보 같은 것들 특히 유용 할 것입니다 특정 드로우 콜을 보는 것은 나쁘다 그게 어디서 온거야? 그래 관객 : [INAUDIBLE] BEN CLAYTON : 다시 한번 말하지만, 그들을 우리에게 보내주십시오

그리고 우리는 그들에게 행동 할 것입니다 청중 : 프레임 속도보기에 현재 렌더링이 표시됩니까? 바운드 된 타겟, 또는 백 버퍼가 될까요? 우리가 사용하는 프레임 버퍼는 현재 무엇이 있는지 보여줍니다 그 시점에서 흔적이 많다 BEN CLAYTON : 게시물 효과와 화면에서 벗어나면 모든 것을 디버깅 할 수 있습니다 관객 : 아마도 나는 그것을 놓쳤습니다

GPU 및 Android OS의 요구 사항은 무엇입니까? 지금 지원됩니까? Android 버전은 모든 GPU에서 작동합니까? BEN CLAYTON : 좋습니다, 이론적으로 그렇게 중요하지 않아야합니다 우리가 그 순간에 가로 챌 방법 드라이버를 패치하는 것입니다 그리고 패치 할 수있는 것에 몇 가지 제한이 있습니다 그래서 우리는 특정 바이트 수를 요구합니다 우리가 변경하려고하는 함수 당 명령 수

특정 운전자에게는 기능이 너무 짧습니다 Android 최신 버전 출시 및 곧 출시 예정 [INAUDIBLE] OS 지원입니다 그래서 우리는이 불쾌한 운전자에게 패치를하지 않을 것입니다 실제로 OS에 훅이 생깁니다 그래서 우리는 무엇이든 추적 할 수 있습니다

관객 : 안녕하세요 픽셀 버퍼 [INAUDIBLE]의 [INAUDIBLE] 확장 프레임에 있습니까 을지 지하다– BEN CLAYTON : 현재 깊이를 검사 할 수 있습니다 스텐실에 대한 견해가 없습니다 그러나 우리는 곧 그 일을 할 것입니다 관객 : 그것은 우리에게 매우 유용합니다

BEN CLAYTON : 우리가하는 일에 대해서 – 그 전에 도구가 꽤 모듈 식입니다 우리는 모든 현명한 사람들이 있습니다 하나의 특정 프로세스에서 그리고 UI는 사실 전혀 묶여 있지 않습니다 우리는 RPC 사용자 인터페이스를 사용하여 서버와 통신합니다

그리고 우리는 실제로 우리가 다른 도구를 가지고 있습니다 당신이 그것을 다운로드 할 때 배 그것은 GAPID라고합니다 실제로 동일한 기능을 많이 제공합니다 개발하는 데 정말 유용했습니다

이 명령을 사용하여 명령, 상태, 프레임, 그것을 사용하여 GL 오류 또는 Vulkan 문제를 찾으십시오 자동화 된 테스트에서이 점에서 많은 가치를 발견합니다 추적을 할 수 있습니다 명령 줄 도구를 사용할 수 있습니다 예를 들어 야간 빌드의 일부로 그렇지 않으면 실종 될 응용 프로그램의 문제

그래서 예를 들어, 나는 가지 않을거야 명령 행을 입력하십시오 그러나 우리가 단지 demoing하고 있었던 것과 같은 흔적이 주어지면서, 특정 시점에서 스크린 샷을 얻을 수 있습니다 우리는 또한 MP4 비디오를 만들 수 있습니다 네가 가진 건 뭐든간에

우리가 가지고있는 또 다른 모드가 있습니다 추적하는 동안 프레임 버퍼를 캡처합니다 그리고 나서 우리가 검증을 할 때, 우리는 실제로 리플레이가 일치하는지 확인할 수 있습니다 하나의 기기 재생이 진행될 때, 운전자와 운전자 사이의 변화에 ​​특히 유용 할 수 있습니다 예를 들면

그리고 내 슬라이드가 실패했습니다 예 그래서 우리가 현재하고있는 현재의 일, 시도해 본 사람들을 위해 이미 GAPID, 실망했을 수도 있습니다 도구의 성능 우리는 그것이되어야 할만큼 빠르지 않다는 것을 충분히 알고 있습니다

그리고 너무 많은 메모리를 차지합니다 이것이 우리의 가장 중요한 것입니다 지금 당장 노력하고있어 빨리해라 리소스를 덜 차지하게 만듭니다

GL ES의 중간 실행 캡처는 다음과 같습니다 우리는 사람들이 많이 많이 원한다는 말을 들었습니다 그래서 우리는 그것을 곧 풀어 나갈 것입니다 그리고 기기 재생시 – 우리가 간단히 언급했듯이 나는이 컴퓨터의 모든 USB 포트를 실제로 사용했습니다

GL ES에 대한 재생이이 컴퓨터에서 수행되고 있습니다 따라서 우리는 GL ES에서 다시 데스크톱 GL로 변환하여 재생합니다 우리가 할 수있는 한 멀리까지 가져 왔습니다 애플은 GL 드라이버를 더 이상 밀어 붙이지 않았다 우리는 현재 GL ES가 실제로 데스크톱 GL, 기본 포트를 초과하므로 데스크톱 재생, 번역을 통해 실제로는 불가능하기가 어렵다

불칸에게도 마찬가지입니다 공연 우리는 또한 그곳에서 유효성 확인을 원합니다 보고서의 일부로 따라서 레이어를 가질 필요가 없습니다 너는 흔적을 남겼다

그리고 같은 정보를 얻습니다 그리고 마지막은 Vulkan 데이터를 시각화하기위한 향상된 UI입니다 Vulkan은 GL ES의 매우 다른 짐승입니다 즉각적인 모드가 아닙니다 명령 버퍼가 있습니다

일련의 호출 순서로 항목을 표시하려고합니다 그것을하는 한 방법입니다 그러나 우리가 느끼는 최선의 방법은 아닙니다 그래서 우리는 지금 많은 연구를하고 있습니다 이 새로운 그래픽을 더 잘 시각화하는 방법 API를 사용하면 그래프 표현이 더 많을 수도 있습니다

그 후에 우리는 사물에 대한 많은 아이디어를 가지고 있습니다 우리가하고 싶은 것 그러나 우리는 당신으로부터 피드백을 받고 싶습니다 어디에 우리가 시간을 투자해야하는지 나는이 프로젝트를 수년 동안 이끌어 왔습니다

그리고 10 대 때, 나는 항상 RTS 게임을 너무 많이 사용했습니다 그래서 테크 나무는 일종의 방법입니다 나는 많은 것들이 있다는 점에서 내가하는 일을 시각화한다 내가 할 수 있고 어떤 것들은 잠금 해제 다른 것들 나머지 슬라이드는 우리가 할 수있는 일의 일부를 겪게 될 것입니다

그리고 어떻게 내 미친 gamey 두뇌에 그들을 분류합니다 당신이 기입 할 수있는 설문지가 있습니다 우리가 이것을 통과 할 때 함께 놀면 도움이 될 것입니다 너 내가 뭘 말하는지 알 수 있도록 질문이있을 때에 대해

원하지 않는다면 괜찮습니다 나 한테서 붙들지 않을거야 하지만 그걸 열 수 있다면 계속 해봐 슬라이드는 질문과 관련됩니다 그게 다가와

시원한 파스칼 뮐러 : 문제가 있습니다 벤 클레이튼 : 질문 하나? 청중 : 그래픽 프로파일 러에 대한 타임 라인이 있습니까? GPU를 위해? 파스칼 풋내기 : 타임 라인? 오늘부터 피드백이 무엇인지 알게 될 것입니다 우리는 타임 라인을 얻을 수 있을지도 모릅니다 시원한

첫 번째 그룹은 통계입니다 프로파일 링을 포함하지 않는 것들을 분류합니다 이 그룹에서는 여전히 의미있는 가치를 지니고 있습니다 그래서 우리가 지금 가지고 있어야만하는 가장 간단한 것, 일종의 x 물건입니다 프레임 당 그리기 호출 수입니다

가장 확실한 것입니다 기기에서 2,000 회의 무승부 전화 오직 몇 백에 대처할 수 있습니다 당신은 나쁜 시간을 보낼 것입니다 이것의 예는 프레임 당 분명히 드로우이며, 무승부 당 정점, 무엇이든간에 삼각형, 메모리 사용량의 추정치도 마찬가지입니다 가지고있는 텍스처의 수

우리는 또한 일종의 장치 예산을 생각해 내고 싶다 작년 내 작품의 일부 게임 회사에 나갔다 60 점을 얻는 데 도움을 주려고합니다 x 당 y 가지를 기반으로, 숫자 개발중인 도서 목록 어떤 종류의 합리적인 지침도없이 얼마나 많은 무승부를 요구해야하는지 특정 장치를 만들 수있다 조금 우울합니다

우리는 일종의 데이터를 제공 할 수 있습니다 특정 주력 장치의 경우, 프레임 당 x 개의 정점을 제출하는 것이 좋습니다 예를 들면 우리는 GAPID 내부의 자동 지식을 가질 수 있습니다 다른 장치 모음 네가 알면 경고 해 줄거야

그 예산 밖에서 FrameBuffer 시각화 – 이것들 당신이하는 오버 드로의 숫자 같은 것들입니다 여기에 물건을 넣을 수도 있습니다 심도가 떨어질 수있는 조각을 강조 표시하는 것과 같습니다 시험, 좋은 일이 될 수있다

또는 쉐이더 프로그램에 의해 프레임을 표시하는 것, 예를 들면, 이것은 좋은 알기 방법입니다 여기서 쉐이더를 최적화해야 할 곳을 찾아야합니다 관객 : [INAUDIBLE] 파스칼 뮌스터 : 네, 오버 드로가 그 일부입니다 관객 : [INAUDIBLE] 파스칼 뮌스터 : 이제오고 있습니다 셰이더 정적 분석 – 이것은 까다로운 문제입니다

그것은 공기 중 하나의 손가락이어야합니다 많은 다른 GPU가 있기 때문에 거기 밖으로, 귀하의 쉐이더 코드 사이에 많은 중간 레이어 셰이더가 실제로하는 일은 하드웨어가 수행하는 작업입니다 하지만, 우리는 숫자에 대한 대략적인 견적을 내놓을 수 있습니다 텍스트를 통한 ALU 작업의 예를 들어, 손을 물결 치는 데 도움이 될 수 있습니다 셰이더가하는 일 중 프로파일 링 – 큰 기능 요청은 여기에 있습니다

사람들이 생각하는 제일 먼저하는 것은 틀과 그림, 카운터, 나는 말했다 그러나 프레임과 드로 타임은 아주 좋습니다 불행히도 타일링 된 아키텍처는 통화 시간은 매우 어렵습니다 우리는 몇 가지 아이디어를 가지고 있습니다 유용한 일부 데이터를 찾을 수 있습니다

그러나 프레임 속도가 얼마인지 알면, 어떤 일들이 얼마나 오래 걸리고 있는지 아는 것 우리가하고 싶은 것이 분명합니다 IHV로부터 하드웨어 카운터를 얻을 수 있다면, 우리는 하드웨어의 거대한 바다를 맛보고 싶습니다 아무도 정말로 이해할 수없는 카운터 의미있는 시간이기 때문에 얼마나 많은 시간을 할 수 있는지 알려줄 수 있습니다 [INAUDIBLE]을 (를) 지출하면 얼마나 많은 시간을 할애 할 수 있습니다 예를 들어, 캐시 엉망진창

많은 IHV 도구들 드로우 콜 타임 (draw call time)과 같은 것을 제공하는 것은 상대적 셰이더 비용입니다 그래서 그들의 도구가 정확히 어떻게 말할 수 없을지라도 오랜 한 번의 무승부 요청이 걸렸습니다 그들은 더 많은 접근 방식을 취합니다 이것들은 당신이 가진 모든 쉐이더 프로그램들이다 그리고이 특별한 것은 실제로 당신의 시간의 30 %를 필요로합니다

최적화해야하는 곳입니다 이것은 내가 생각하기에 매우 소중한 것입니다 우리는 확실히해야합니다 우리가 처음 두 가지 일을 끝내면, 우리는 통계를 바탕으로 한 제안을하고 싶습니다 따라서 이전에 다른 도구를 사용한 적이 있다면, 그들은 종종 당신이 생각했는지 제안합니다

정점 형식을 변경하는 것에 대해 [INAUDIBLE] 그 (것)들을 분리하는 것과 반대로? 이러한 것들이 우리가 도구를 원할 것입니다 실제로 가서 당신을 위해 할 수 있습니다 도구에 실제로 사용할 수있는 패턴이 여러 개있는 경우 탐지하여 추적에 적용하고 시간을 정하십시오 우리는 일종의 정렬 된 목록을 제공 할 수 있습니다 영향으로 주문한 이익을 최적화하기 위해 할 수있는 일

나는 게임 개발자, 그들의 시간은 소중합니다 너는 삼일을 보내고 싶지 않아 절반 이상 향상시킬 수있는 무언가를 최적화합니다 이 한 가지 일을 보여줄 수 있다면 시간의 10 %를 절약 할 수 있습니다 자주 잊혀지는 또 다른 일 전력 사용 및 열전쌍입니다

정말 중요합니다 그래서 우리가 당신에게 어떤 프로파일 링을 줄 수 있다면 타이밍에 관한 정보, 우리도해야한다 얼마나 많은 힘을 사용하고 있는지 보아라 우리가 할 수있는 게 있는지 알아봐 그것을 줄이기 위해 제안하십시오

셰이더 디버깅 – 버텍스 나 프래그먼트를 클릭 할 수 있음 귀하의 FrameBuffer에서 단일 라인 스테핑 있습니다 그래서 이것은 아주 기본적인 버그입니다 우리는 당신이 전방과 후방으로 나아갈 수 있기를 원합니다 시계 창을 가지고, 당신이 따라갈 때 모든 값을보십시오 여기에도 큰 질문이 있습니다

당신이 더 많은 시뮬레이션을 할 수 있을지 여부 실제 하드웨어 대 두 가지 모두에 장단점이 있습니다 디버깅하려는 경우, 그리고 당신은 검은 색 픽셀을 얻고 있고 그것은 드라이버 또는 하드웨어입니다 문제를 제기 한 다음, 분명히, 실제로 하드웨어 문제가 있음을 여러분에게 증명할 수 있습니다 반면에, 실제 하드웨어에서 벗어나려고 할 때 같은 방식으로 왜곡 된 결과를 줄 수 있습니다 픽셀 역사 – 그것은 디버깅의 일부분이며, 하지만 FrameBuffer를 클릭하면 색깔에 영향을 미치는 모든 무승부, 또는 깊이 또는 스텐실

나는 그것들을 포함 시키거나 제외시킬 수있다 이후 겹쳐 썼다 셰이더 기능 및 성능 표 버텍스 폼에 더 일반적입니다 미친 버텍스가 하나 있다면 스크린에서 반 마일, 너 너 그 하나의 것을 식별 할 수 있고, 가서 가서 디버깅 할 수 있습니다 왜 당신이 [무관심한] 또는 무엇인가를 가지고 있는지 알아 내십시오

그리고 우리가 생각한 다른 것 너 괜찮 으면, 아주 좋을거야 특정 쉐이더 디버깅, 입력 강조하기 출력합니다 예를 들어 텍스쳐가 있다면, 당신이 당신의 쉐이더에서 샘플링하고 있다는 것, 실제로 조각을 강조 표시합니다 그 특별한 쉐이더 [INAUDIBLE]에 관련되어 있습니다 우리가 할 수 있다고 가정하면, 매우 좋을 것입니다

등방성 필터링이있는 경우 실제로 사용되는 모든 조각 그리고 마침내 레퍼런스 레서 라이저를 사용하게됩니다 그래서 우리 말의 문제를 만지십시오 데스크톱 리플레이를 우리가 할 수 있다고 생각하는 한 이제 대안을 찾고 있습니다

따라서 참조 복원 기가 매우 유용 할 수 있습니다 다른 것들을 위해서뿐만 아니라 보장 된 재생을 갖는 것 호스트 시스템에서 수행 할 수 있습니다 이제 첫 번째는 우리가 알고있는 것입니다 장치에는 문제가 있습니다 운전자는 버그가있을 수 있습니다

하드웨어에 실제로 결함이있을 수 있습니다 우리는 이것에 대해 정말로 듣고 싶습니다 우리는 얼마나 많이 원하는지 충분히 강조 할 수 없다 깨진 운전자에 대해 듣기 우리는 사람들이 나쁜 시간을 보내고 있다는 것을 압니다

그러나 우리는 나가서 당신 이야기를 많이해야합니다 그래서 당신이 흔적을 가지고 있다면, 당신이 그것을 가지고, 당신은 유휴 상태입니다, 우리는 우리가 백그라운드에서 재연 할 수 있다고 생각합니다 참조 수복물로 그 후에, 당신은 당신이 기기에서 재생되고있다 우리가해야한다고 생각하는 것과 일치합니다 그리고 그들이 같지 않으면, 우리는 당신을 제공 할 수 있습니다

원 클릭 리포터 버그 그것은 우리에게 우리가 운전수에게 줄 수있는 정확한 기록을줍니다 팀이이를 수정해야합니다 그래서 그것은 안드로이드 생태계에 좋은 방법이 될 것입니다 모든 주위에서 더 좋을 것

GL ES 및 Vulkan 등이 있습니다 그것에 물결 모양의면을, 특히 떠있는 주위에 포인트 정밀도 및 샘플링 우리가 참조 회복기를 가지고 있다면, 우리는 여기에 가치가 있다고 생각합니다 네가 할 수있는 손잡이가있어서 기본적으로 물건이 어떻게 보이는지 비교하는 것 다른 하드웨어 사양 그래서 부동 소수점 정밀도는 고전적인 것입니다

부동 소수점 정밀도를로드하는 경우, 그러면 셰이더가 갑자기 0으로 나누기 시작합니다 이것은 일어나고 무언가이다 우리가 너를 자동으로 잡을 수 있을지도 몰라 [INAUDIBLE]에서 On-host replay – 우리는 GL ES를 얻었습니다

우리는 Vulkan을 위해서도 그것을 원합니다 레퍼런스 레서 라이저로 확실히 가능합니다 우리가 지금 가지고있는 것보다 훨씬 견고합니다 그리고 나서 마침내 자동화 된 테스트가 시작됩니다 이런 종류의 GAPID 도구로 돌아갑니다

당신이 안식의 휴식을 취한다면 네가하고있는 야간 빌드를 가지고있어 기본적으로 GAPID를 기본적으로 가질 수 있습니다 게임의 흔적을 가져라 그래픽의 API를 잘못 사용하지 않았는지 확인하십시오 그리고 이것을 사용하여 참조를 얻을 수도 있습니다

게임이 어떻게 보이는지에 대한 비디오 그리고 도구를 사용하여 실제로 얻으십시오 관심을 보이는 여러 기기의 동영상 잠재 고객이 팝업으로 표시 할 때 문제가 될 수 있습니다 점점 지난 주와는 달리 문 밖으로 게임 그래서 그것은 내가 방금 만났던 많은 것들이었습니다

아주, 아주 빨리 덮여 내가 여기에서 놓친 것들이 있다면 당신은 생각합니다 매우 귀중합니다 제발, 제발, 알려주세요 그리고 그게 다야

질문 있니? 관객 : 파워 프로파일 링에 대해 이야기했습니다 BEN CLAYTON : 죄송합니다, 그를 위해 마이크 관객 : 방금 전원 프로파일 링에 대해 언급했습니다 당신은 정교 할 수 있습니까? BEN CLAYTON : 아직 연구 중에 있습니다 그러나 그 생각은 우리가 능력을 가질 수 있다는 것입니다

같은 프레임을 되풀이하여 재생합니다 실제로 하드웨어를 지원하여 배수관을 보았다면 열전자를 모니터링하면 적어도 게임을 꾸준히 계속한다면, 함께 올라와라 이 특정 프레임과 비슷한 네가 가질 특성의 종류 야 배터리 및 열전쌍 그리고 우리가 최적화를 위해 가지고있는 휴리스틱 중 하나는, 우리는 또한 그것을 시도 할 수 있습니다

너를 밤새껏 달려야하는 무언가일지도 모르다 시도하고 안정적인 결과를 얻을 수 있습니다 하지만 주와 주보다 좋습니다 너 자신을 파고 들었다 관객 : 질문지에 대한 URL을 백업 할 수 있습니까? BEN CLAYTON : 물론입니다

우리는 거기에 갈 관객 : 힘과 열기에 관해서는 그걸 묶을 방법이 될거야 코어 주파수 및 CPU 사용량, 거기 있는지 여부를 볼 수 있습니다 통화 제출 간의 절충 시간 대 실제 GPU 시간? 벤 클레이튼 : 좋은 제안 그래 어쩌면

이것들은 우리가 간단히 살펴 봤던 것들입니다 우리는 개발을 시작하지 않았습니다 그래, 그게 가치있는 일이라면

DevBytes: Android L Developer Preview – Camera2 API

ANKUR KOTWAL : Android L의 Camera2 API 카메라를 엄청나게 제어 할 수 있습니다 저는 Google 개발자 옹호자 Ankur Kotwal입니다

이 API가 얼마나 놀라운 지 보여 드리겠습니다 먼저 Kit Kat 카메라 API를 살펴 보겠습니다 그것은 정말로 직접적인 포인트를 위해 디자인되었고 촬영되었습니다 카메라 애플 리케이션, 그리고 이것 때문에, 스트리밍 이미지 데이터에 액세스하는 데에는 제한적인 방법이 있습니다 또한 API는 수동 캡처 제어 방법을 지원하지 않습니다

이러한 한계를 극복하기 위해 개발자들에게 능력을 부여한다 멋진 카메라 앱을 만들기 위해 완전히 새로운 API 세트를 도입했습니다 AndroidhardwareCamera2에서 꾸러미

한 번 보자 이 새로운 API는 파이프 라인으로 설계되었으며, 일방 통행 대신에 이제 출력 서피스를 미리 구성 할 수 있습니다 카메라에 부착하십시오 각 표면은 대상이 될 수 있습니다 이미지 버퍼의 스트림에 대한 요청을 전달할 수 있습니다

캡처 세션을 통해 각 요청은 하나의 결과 객체로 변환되며, 대상 표면이 이미지 버퍼로 채워집니다 여러 요청을 동시에 전달할 수 있지만, 이러한 요청은 비동기 적으로 처리됩니다 간단한 카메라를 만드는 데 필요한 것을 살펴 보겠습니다 이 새로운 API를 사용하여 먼저 카메라 하드웨어를 감지해야합니다 장치의 기존 카메라를 열거하고, 카메라에서 자세한 정보를 얻으십시오

CameraManager 서비스를 사용하여 그런 다음 열린 카메라 방법을 호출하여 카메라를 사용할 수 있습니다 ID와 콜백 목록이 있습니다 장치가 준비되면 onOpened 메서드 카메라 장치 인스턴스로 호출됩니다 이 순간은 하나의 카메라를 나타냅니다 요청을 제출하기 전에 버퍼 출력 타겟 세트를 정의한다

그들을 카메라 장치에 연결하십시오 이 작업은 카메라 캡처 세션을 시작하여 수행됩니다 예를 들어, TextureView를 사용하여 미리보기, 비디오 레코딩 용 MediaRecorder, 또는 YUV 처리를위한 RenderScriptAllocation 서페이스를 만들면 서페이스의 크기 중요하다 카메라 장치는 특정 유형의 크기 만 지원합니다

따라서 각 표면에 유효한 크기를 설정해야합니다 먼저 사용 가능한 스트림 구성을 얻습니다 카메라가 스칼라 스트림 구성을 지원하는지 여부 지도 크기는 결과 중 하나 여야합니다 getOutputSizes 메소드에서

이 예제에서는 첫 번째 예제를 가져와야합니다 하지만 실제 시나리오에서는 이 배열을 조사하고 싶을지도 모른다 적절한 크기를 선택하십시오 필요한 서페이스를 생성 한 후, createCaptureSession 메소드를 호출 할 수 있습니다 세션을 만들려면 다음을 요구할 수 있습니다

수백 밀리 초 세션이 준비되면 요청을 처리 할 수 ​​있습니다 필요에 따라 요청 빌더를 만들 수 있습니다 미리 정의 된 템플릿 중 하나를 사용하여 그런 다음 캡처 요청을 빌드 할 수 있습니다 빌드에서 build 메소드를 호출하여

여기서 TEMPLATE_PREVIEW는 미리보기 요청에 사용되며, TEMPLATE_STILL_CAPTURE는 JPEG 캡처에 사용됩니다 의뢰 이제는 세션과 요청을 모두 갖게됩니다 요청을 제출하는 데는 두 가지 옵션이 있습니다 캡처는 주어진 캡처 요청을 사용하여 하나의 이미지를 캡처하는 것입니다

한편, setRepeatingRequest 이미지를 연속적으로 캡처하기위한 것이다 명시된 요청을 반복적으로 사용함으로써 명시 적으로 멈춰 capture 및 setRepeatingRequests 모두 캡처 요청 목록을 가져 오는 오버로드가 있습니다 캡처를위한 CaptureBurst 및 setRepeatingBurst 반복 요청을 설정합니다 그러나 캡처 요청을 제출하기 전에, 카메라를 조정해야 할 수도 있습니다

귀하의 필요에 따라 설정 빌더의 속성을 수정할 수 있습니다 요청을 작성하기 전에 화이트 밸런스 모드, 효과, 심지어 플래시 설정 정말 큰 효과가 있습니다 음화와 세피아 같은 것을 적용 할 수 있습니다

태양 광 등 노출 및 초점 설정과 정확하게 상호 작용할 수 있습니다 CONTROL_AF_TRIGGER 및 CONTROL_AE_PRECAPTURE_TRIGGER을 (를) 사용합니다 그래도 조심해 초점을 올바르게 설정하는 것을 잊어 버린 경우, 당신은 조금 흐린 이미지로 끝날 수 있습니다

요청을 제출할 때마다 캡처 수신기 콜백을 전달할 수 있습니다 캡처 진행 상황을 추적합니다 예를 들어, onCaptureStarted를 사용할 수 있습니다 셔터 음 재생 또는 캡처 재생 생기 캡처 요청이 처리 된 후, onCaptureCompleted는 총 캡처로 호출됩니다

요청 결과 인스턴스 이 순간, TotalCaptureResult 캡처 프로세스의 최종 구성을 포함하며, 대상 표면이 곧 나타납니다 최종 캡처 데이터가 전송됩니다 표면을 통해 출력 이미지에 액세스 할 수 있습니다 그리고 그 이미지를 사용하는 방법은 당신에게 달린 것입니다

기본 카메라 응용 프로그램에서 바이트 버퍼를 얻을 수 있습니다 상기 화상 판독 부로부터의 화상 중, 그것을 SD 카드에 저장했습니다 그래서 이것은 새로운 Camera2 API입니다 매우 유연하고 통합 된 파이프 라인으로 설계되었습니다 모든 카메라 관련 작업에 대해 응용 프로그램의 기능을 향상시킵니다

카메라 서브 시스템을 제어한다 Camera2 API에 대한 자세한 내용을 확인할 수 있습니다 유용한 샘플은 developerAndroidcom에서 확인하십시오

Android 개발자를 확인하십시오 더 많은 새로운 API를 미리보기 고맙습니다

Android Studio 3.2, new APIs for ARCore, what’s new in Kubernetes 1.12, & more!

TIMOTHY JORDAN : 안녕하세요 저는 The Developer Show의 Timothy Jordan입니다

가장 멋진 개발자의 주간 업데이트입니다 Google의 뉴스 이제 Android Studio 32를 다운로드 할 수 있습니다 설명에 링크 된 게시물로 넘어가십시오

Android와 같은 주요 기능에 대한 최신 세부 정보는 아래를 참조하십시오 앱 번들, 에너지 프로파일 러 및 새로운 Android 에뮬레이터 스냅 샷 우리는 최근 ARCore 플랫폼 업데이트를 발표했습니다 증강 현실 체험을위한 Scene Form, 3D 렌더링도 업데이트했습니다 Android에서 AR 응용 프로그램을 작성하기위한 라이브러리 알고리즘 개선이 포함됩니다

그러면 앱에서 메모리와 CPU를 적게 소비 할 수 있습니다 더 긴 세션 동안의 사용뿐만 아니라 콘텐츠에 대한 유연성을 제공하는 새로운 기능 조치 코드 및 예제 스크린 샷이 게시물에 있습니다 클라우드 네이티브 커뮤니티 재단 지난 주 Kubernetes 112를 발표했다

이 게시물은 Kubernetes 오픈 소스에서 Google 클라우드가 주도하고 있습니다 프로젝트 (빠른 확장, 토폴로지 인식 스토리지 포함) 프로비저닝 및 고급 감사 기능을 제공합니다 최근에 Google은 Cloud Tasks를 발표했습니다 App Engine Flex의 작업 대기열 서비스입니다 2 세대 런타임 분산 작업의 모든 이점을 제공합니다

대기열 (작업 오프 로딩 포함) 서비스 간의 느슨한 결합 및 향상된 시스템 신뢰할 수 있음 시작하기위한 자세한 내용과 링크를 보려면, 게시물에 머리를 Google 글꼴 카탈로그에는 이제 일본어 웹 글꼴이 포함되어 있습니다 관련된 최적화에 대한 일부 세부 사항은, 게시물을 봐 Chrome을 출시한지 거의 10 년이 지났습니다

확장 시스템 및 거의 절반의 Chrome 데스크톱 사용자 확장 기능을 적극적으로 사용하여 맞춤 설정 Chrome과 웹에서의 경험 이러한 사용자는 신뢰할 수 있어야합니다 설치하는 확장 프로그램이 안전하고 개인 정보를 보호하며, 및 공연자 그래서 우리는 최근 몇 가지 변경 사항을 발표했습니다 호스트 권한에 대한 사용자 제어, 변경 사항 확장 검토 프로세스, 새로운 코드 가독성 요구 사항 설명에 링크 된 게시물을 클릭하십시오 모든 세부 사항은 아래를 참조하십시오

마음에 드시고 구독하고 공유하시는 것을 잊지 마십시오 저는 The Developer Show의 Timothy Jordan입니다 보고 주셔서 감사 드리며 다음 주에 다시 보겠습니다 안녕하세요 저는 The Developer Show의 Timothy Jordan입니다

한 번 더 – TIMOTHY JORDAN : [LAUGHING] 그래 좋아 지금? 그래 좋아

Introduction to Maps API on Android Wear (100 Days of Google Dev)

HOI LAM : Android Wear는 멋진 제품입니다 신속하고 눈에 잘 띄는 정보 당신이 연결되어있는 동안 현재에 머무를 수있게 해줍니다

자연스럽게 가장 많이 요청한 기능은지도에 위치를 표시하는 것입니다 저는 Hoi Lam이고 최신 Google Play 서비스 업데이트로, Google Maps API가 Android Wear에 도착했습니다 이것은 클래스 매핑 기능이 최고라는 것을 의미합니다 단 몇 줄의 코드 만 남기고 이 Tech Byte에서는 몇 가지 일반적인 사용 방법을 설명합니다 Android Wear에서지도 API에 대한 사례, 이를 구현하는 방법에 대한 첫 걸음을 제공합니다

시작하기 전에 좋은 소식이 있습니다 Android Wear의 Google Maps API Android 휴대 전화 및 태블릿과 동일한 API를 기반으로합니다 결과적으로 Android에서 Google Maps API를 사용한 경우 전에, 집에서 바로 느낄거야 가장 일반적인 사용 사례 중 하나는 단순히지도를 표시하는 것입니다 앱에서 획기적인 마크를 표시해야 할 수도 있습니다

또는 실행중인 경로를 표시 할 수 있습니다 이 경우, Map Fragment 또는 Map View에 사용할 수 있습니다 Google Maps API 키를 신청하십시오 필요한 경우 마커 및 폴리 라인을 추가합니다 이 모든 기능을 사용할 수 있습니다

이미 동일한지도 API를 사용하고 있습니다 Android에서 잘 알고 있지만 단 한 가지주의 사항 만 있습니다 Android Wear가 제스처를 예약합니다 해고를 위해 왼쪽에서 오른쪽으로 스 와이프하는 중 현재 응용 프로그램 주위를 둘러 볼 맵이 필요하지 않은 경우, 이것은 계속 작동 할 것입니다

그러나 주위를 돌아 다니며 이동하려는지도가 필요한 경우, 이 특정 해제 동작을 무시해야합니다 혼란을 줄이고 실제로 사용자가 앱을 나가게하십시오 이렇게하려면 Overly Dismissing을 구현해야합니다 보기, 십자가와 함께이 빨간색 동그라미, 긴 클릭 이벤트에 첨부하십시오 뷰는 닫는 동작을 처리합니다

또 다른 일반적인 사용 사례는지도에서 위치를 선택하는 것입니다 친구 또는 택시가 당신을 거기에서 만날 수 있도록 이를 구현하기 위해 마커를 배치 할 수 있습니다 화면의 한가운데에 놓고 사용자가 주변에서 놀 수있게하십시오 지도

이것은 맵 조각 내에서 선택된 위치를 나타냅니다 요소 그런 다음 Google지도 onCameraChange 리스너를 사용하십시오 사용자가지도 주변에서 이동했는지 여부를 감지합니다 새 위치는 다음을 통해 액세스 할 수 있습니다

cameraPositiontargetlatitude 그리고 경도 그런 다음이 정보를 수신자에게 보낼 수 있습니다 친구 나 택시 운전사가 되십시오

사용 방법을 구현하는 방법에 대한 자세한 기술 정보는 우리가이 기술 바이트에서 설명한 경우, Maps API 블로그 게시물로 이동하십시오 또한 심층적 인 참조 정보 Google 개발자에게 제공됩니다 이 두 번째 링크를 통해 나는 Hoi Lam입니다 Android Wear는 사용자를 위해 설계되었습니다 이동 중에도 연결 상태를 유지할 수 있습니다

Android Wear의 Google지도 API를 사용하면 개발자는 Google지도에 힘 입어 강력한 도구를 갖추고 있습니다 따라서 실제 사용자를 계속 움직여 보겠습니다

Google Play Android Publisher plugin: Credentials setup

Google Play 개발자 콘솔에서 설정, API 액세스를 차례로 선택합니다 버튼을 클릭하여 새 API 프로젝트를 만듭니다

단추를 클릭하여 API 프로젝트에서 새 서비스 계정을 만듭니다 Google Developers Console 링크를 클릭합니다 새 서비스 계정을 만듭니다 연결된 키 쌍으로 계정이 생성됩니다 브라우저가 개인 키를

p12 파일로 자동 다운로드합니다 서비스 계정의 전자 메일 주소를 복사합니다 Google Play Android 게시자 플러그인이 이미 설치되어있는 Jenkins로 전환합니다 새 자격 증명을 추가하십시오 드롭 다운 목록에서 '개인 키에서 Google 서비스 계정'을 선택하십시오

원하는 프로젝트 이름을 지정할 수 있습니다 P12 키 유형을 선택하십시오 Google Developers Console의 서비스 계정 이메일 주소를 붙여 넣습니다 Google Developers Console에서 다운로드 한 p12 파일을 업로드합니다

Jenkins는 이제 Google Play 게시자 API에 액세스하는 데 필요한 정보를 보유하고 있습니다 Google Play 개발자 콘솔로 다시 전환하면 새로 생성 된 서비스 계정이 표시됩니다 '액세스 권한 부여'버튼을 클릭하십시오 서비스 계정이 수행 할 수있는 작업을 제한하기 위해 일부 사용 권한을 제거하십시오 설치가 완료되었습니다

젠킨스는 이제이 서비스 계정을 사용하여 Google Play에서 Android 앱을 업데이트 할 수 있습니다