التعرف على الاشياء في الاندرويد image labeliing من مكتبة ML kit
01 June
بشعار ان قالوا لك لن تصل اجعل في الاذنين اصابعك 😂😂
هذا الدرس الثاني من سلسلة دروس شرح مكتبة ML Kit حسنا لم اكن اعلم ان الامر بهذه السهولة الامر فهي ابسط من التعامل مع كل المكتبات الاخرى على الفايربيز و اليوم هو يوم الحديث عن خاصية التعرف على الاشياء بالمعالجة على الهاتف يستطيع هاتفك المحمول التعرف على ازيد من 400 شيء كالاشخاص حيوان نبات الملامح الاماكن و غيرها و يمكنك ايجاد تفاصيل اكثر من الموقع الرسمي .
الصفر : المشروع موجود على github .
اولا :اضافة الخاصية الى مشروعك ←
1-يجب عليك ربط التطبيق بالفايربيز .
2-اضف الكود التالي الى ملف build.gradle ↓
4-اضف الكود التالي الى ملف manifest ان كنت ستستخدم الكاميرا↓
ثانيا : الواجهة ←
لدينا واجهة بسيطة و يمكنك القول انها غبية
حسنا هذه هي الواجهة اذن و الكود سيكون على الشكل التالي :
ثالثا : الحصول على labels ←
الان الى الكود :
1-بما ان api الكاميرا في الاندرويد كانه برمج في اخر الشارع لذا فانا ساستعمل هذه المكتبة fotoapparat .
2- اضافة كود اخد الاذن للوصول للكاميرا اليك الطريقة .
3-الان يمكنك الموت بسلام او اضافة الكود :
المصادر :
هذا الدرس الثاني من سلسلة دروس شرح مكتبة ML Kit حسنا لم اكن اعلم ان الامر بهذه السهولة الامر فهي ابسط من التعامل مع كل المكتبات الاخرى على الفايربيز و اليوم هو يوم الحديث عن خاصية التعرف على الاشياء بالمعالجة على الهاتف يستطيع هاتفك المحمول التعرف على ازيد من 400 شيء كالاشخاص حيوان نبات الملامح الاماكن و غيرها و يمكنك ايجاد تفاصيل اكثر من الموقع الرسمي .
الصفر : المشروع موجود على github .
اولا :اضافة الخاصية الى مشروعك ←
1-يجب عليك ربط التطبيق بالفايربيز .
2-اضف الكود التالي الى ملف build.gradle ↓
build.gradle -> App
implementation 'com.google.firebase:firebase-ml-vision:15.0.0'
3-نقوم باضافة الكود التالي الى ملف Manifest<meta-data android:name="com.google.firebase.ml.vision.DEPENDENCIES" android:value="label"/>
دور هذا الكود هو تحميل الملفات التي يحتاجها تطبيقك اثناء التنصيب كي لا تحدث معك اي مشكلة .اما ان لم تضفه فلا مشكلة فسيتم تحميل الملفات المرغوب فيها عند اول تشغيل لتطبيقك على هاتف المستخدم لكن لا ينصح بهذا .4-اضف الكود التالي الى ملف manifest ان كنت ستستخدم الكاميرا↓
<manifest //..>
//...
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
</manifest>
وفي حال واجهة مشكلة اضف الكود التالي الى ملف build.gradle ↓
build.gradle -> Project
repositories {
//...
maven { url 'https://jitpack.io' }
}
ثانيا : الواجهة ←
لدينا واجهة بسيطة و يمكنك القول انها غبية
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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"
android:background="#efefef">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
</android.support.design.widget.AppBarLayout>
<io.fotoapparat.view.CameraView
android:id="@+id/camera_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- Adding bottom sheet after main content -->
<include layout="@layout/bottom_sheet" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/takePic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="@+id/bottom_sheet"
app:srcCompat="@drawable/ic_camera"
android:layout_margin="10dp"
app:fabSize="normal"
app:layout_anchorGravity="top|start" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fromDevice"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="@+id/bottom_sheet"
app:srcCompat="@drawable/ic_upload"
android:layout_margin="10dp"
app:fabSize="normal"
app:layout_anchorGravity="top|center" />
</android.support.design.widget.CoordinatorLayout>
ثم ملف xml اخر لل bottomsheet .
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="100dp"
android:background="#fff"
android:orientation="vertical"
app:behavior_hideable="false"
app:behavior_peekHeight="56dp"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="دعني احزر هذه الصورة بها"
android:textColor="#444"
android:textSize="18dp"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/itemsList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>
ثالثا : الحصول على labels ←
الان الى الكود :
1-بما ان api الكاميرا في الاندرويد كانه برمج في اخر الشارع لذا فانا ساستعمل هذه المكتبة fotoapparat .
2- اضافة كود اخد الاذن للوصول للكاميرا اليك الطريقة .
3-الان يمكنك الموت بسلام او اضافة الكود :
class Mlearing:AppCompatActivity(){
lateinit var sheetBehavior:BottomSheetBehavior
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.image_labeling)
//الواجهة
setSupportActionBar(toolbar)
sheetBehavior = BottomSheetBehavior.from(bottom_sheet)
//الكاميرا
val fotoapparat = Fotoapparat(context = this, view = camera_view)
fotoapparat.start()
//اخد صورة
takePic.setOnClickListener {
val photoResult =fotoapparat.takePicture()
photoResult
.toBitmap()
.whenAvailable { bitmapPhoto ->
getLabelsFromDevice(bitmapPhoto!!.bitmap)
}
}
//اخد الصورة من الهاتف
fromDevice.setOnClickListener {
val photoPickerIntent = Intent(Intent.ACTION_GET_CONTENT)
photoPickerIntent.type = "image/*"
startActivityForResult(photoPickerIntent, 1)
}
}
private fun getLabelsFromDevice(bitmap: Bitmap) {
val image : FirebaseVisionImage = FirebaseVisionImage.fromBitmap(bitmap)
val detector : FirebaseVisionLabelDetector = FirebaseVision.getInstance().visionLabelDetector
detector.detectInImage(image)
.addOnSuccessListener {
// انتهى بنجاح
itemsList.removeAllViews()
for(firebaseVision : FirebaseVisionLabel in it){
// اخد اسم الشى مع نسبة الثقة
val item=TextView(this)
item.text="${firebaseVision.label} : ${firebaseVision.confidence}"
when{
firebaseVision.confidence in 0.4..0.7->{item.setTextColor(Color.BLUE)}
firebaseVision.confidence >= .7->{item.setTextColor(Color.GREEN)}
firebaseVision.confidence <= 0.4->{item.setTextColor(Color.RED)}
}
itemsList.addView(item)
}
}
.addOnFailureListener {
// خطا ما وقع
Toast.makeText(baseContext,"Sorry, something went wrong!",Toast.LENGTH_SHORT).show()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == RESULT_OK) {
val chosenImageUri = data.data
val mBitmap= MediaStore.Images.Media.getBitmap(this.contentResolver, chosenImageUri)
getLabelsFromDevice(mBitmap)
}
}
}
وهنا نصل الى النهاية و ان شاء الله سيتم تحديث الموضوع مستقبلا بالنسبة للكلاود الى ذلكم الحين تابعونا على فايسبوكالمصادر :
اترك لنا تعليقا