Android studioda opencv ile kamera açarken siyah ekran
Selamlar,
Üniversitede aldığım bir tezde görme engelliler için sarı yolları tanıyıp onlara sesli uyarı veren bir android projesi yapmam gerekiyor. Yaptığım araştırmalarda bulduğum kodlar ve kaynaklar sonucu yazmaya başladım ancak işin ilk aşamalarında kamerayı opencv ile açmaya çalışırken siyah ekran hatası almaktayım. Yazarken kullandığım kaynakları ve yazdığım kodları aşşağıya ekledim. Konu hakkında bilgisi olanlar dönüş yapıp yol gösterebilirlerse çok sevinirim. Şimdiden ilginize teşekkür ederim.
Opencv kurulum ve ayarlamaları için kullandığım kaynak.
Kamerayı açmak için kullandığım kaynak.(opencv kurulumundan sonra bu videodaki gibi log üzerinden test ettiğimde olumsuz sonuç aldım ama opencv manager kullanılmadığı için artık kodun o kısmını sildim)
İzin almak için kulllandığım kaynağı malesef bulamadım ama o kaynaktan aldığım kod opencv ile yazmadan kamerayı normal şekilde çağırırken çalışmıştı.
activity_main:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<org.opencv.android.JavaCameraView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/java_camera_view"/>
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0" />
</RelativeLayout>
MainActivity
package com.example.myapplicationdeneme;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.JavaCameraView;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class MainActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
private static String TAG = "MainActivity";
private int Camera_Permission_Code = 1;
JavaCameraView javaCameraView;
Mat mRgba;
BaseLoaderCallback mLoaderCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status){
case BaseLoaderCallback.SUCCESS:{
javaCameraView.enableView();
break;
}
default:
super.onManagerConnected(status);
break;
}
}
};
static {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
javaCameraView=(JavaCameraView)findViewById(R.id.java_camera_view);
javaCameraView.setVisibility(SurfaceView.VISIBLE);
javaCameraView.setCvCameraViewListener(this);
Button buttonRequest = findViewById(R.id.button);
buttonRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED)
{
Toast.makeText(MainActivity.this,"Gerekli izinler alındı!",Toast.LENGTH_SHORT).show();
}
else
{
requestCameraPermission();
}
}
});
}
private void requestCameraPermission()
{
if(ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CAMERA)){
new AlertDialog.Builder(this)
.setTitle("İzin Gerekli")
.setMessage("Bu izin verilmez ise uygulama çalışmayacaktır.")
.setPositiveButton("Tamam", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(MainActivity.this,new String[] {Manifest.permission.CAMERA}, Camera_Permission_Code);
}
})
.setNegativeButton("Çıkış", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();
}
else
{
ActivityCompat.requestPermissions(this,new String[] {Manifest.permission.CAMERA}, Camera_Permission_Code);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if(requestCode==Camera_Permission_Code) {
if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
Toast.makeText(this,"İzin verildi.",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this,"İzin verilmedi.",Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onPause(){
super.onPause();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onDestroy(){
super.onDestroy();
if(javaCameraView!=null)
javaCameraView.disableView();
}
@Override
protected void onResume(){
super.onResume();
}
@Override
public void onCameraViewStarted(int width, int height) {
mRgba= new Mat(height,width, CvType.CV_8UC4);
}
@Override
public void onCameraViewStopped() {
mRgba.release();
}
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba=inputFrame.rgba();
return mRgba;
}
}
Build.gradle opencv
apply plugin: 'com.android.library'
android {
compileSdkVersion 26
buildToolsVersion "28.0.3"
defaultConfig {
minSdkVersion 8
targetSdkVersion 26
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
build.gradle app
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.example.myapplicationdeneme"
minSdkVersion 24
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation project(path: ':openCVLibrary3410')
}
Opencv manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.opencv"
android:versionCode="34100"
android:versionName="3.4.10">
</manifest>
App Manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplicationdeneme">
<uses-permission android:name="android.permission.CAMERA"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>