实现数据库,新增组件,整理部分代码,完成代码的最终提交

master
Marcus 1 year ago
parent d525a4828d
commit a85fd06d20

@ -52,6 +52,7 @@ android {
}
dependencies {
implementation 'com.j256.ormlite:ormlite-android:6.1'
implementation 'io.github.litao0621:nifty-slider:1.4.6'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.6.1'

@ -21,11 +21,11 @@
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
android:label="@string/app_name" >
<activity
android:name="wificar.SettingsActivity"
android:name="wificar.activity.AboutActivity"
android:screenOrientation="landscape"
android:exported="false" />
<activity
android:name="wificar.MyMainFrm"
android:name="wificar.activity.MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape" >
<intent-filter>
@ -35,11 +35,11 @@
</intent-filter>
</activity> <!-- 这里是另外一个Activity的配置 -->
<activity
android:name="wificar.MyVideo"
android:name="wificar.activity.ControlActivity"
android:label="@string/app_name"
android:screenOrientation="landscape" />
<activity
android:name="wificar.BgPictureShowActivity"
android:name="wificar.activity.BackgroundActivity"
android:label="拍摄的照片"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.Dialog" />

@ -56,7 +56,7 @@ JNIEXPORT void JNI_OnUnload(JavaVM *vm, void *reserved) {
Yolov5
********************************************************************************************/
extern "C" JNIEXPORT void JNICALL
Java_wificar_YOLOv5_init(JNIEnv *env, jclass, jobject assetManager, jboolean useGPU) {
Java_wificar_yolo_YOLOv5_init(JNIEnv *env, jclass, jobject assetManager, jboolean useGPU) {
if (YoloV5::detector != nullptr) {
delete YoloV5::detector;
YoloV5::detector = nullptr;
@ -68,10 +68,10 @@ Java_wificar_YOLOv5_init(JNIEnv *env, jclass, jobject assetManager, jboolean use
}
extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_YOLOv5_detect(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
Java_wificar_yolo_YOLOv5_detect(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
auto result = YoloV5::detector->detect(env, image, threshold, nms_threshold);
auto box_cls = env->FindClass("wificar/Box");
auto box_cls = env->FindClass("wificar/yolo/Box");
auto cid = env->GetMethodID(box_cls, "<init>", "(FFFFIF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -86,7 +86,7 @@ Java_wificar_YOLOv5_detect(JNIEnv *env, jclass, jobject image, jdouble threshold
// ***************************************[ Yolov5 Custom Layer ]****************************************
extern "C" JNIEXPORT void JNICALL
Java_wificar_YOLOv5_initCustomLayer(JNIEnv *env, jclass, jobject assetManager, jboolean useGPU) {
Java_wificar_yolo_YOLOv5_initCustomLayer(JNIEnv *env, jclass, jobject assetManager, jboolean useGPU) {
if (YoloV5CustomLayer::detector != nullptr) {
delete YoloV5CustomLayer::detector;
YoloV5CustomLayer::detector = nullptr;
@ -98,10 +98,10 @@ Java_wificar_YOLOv5_initCustomLayer(JNIEnv *env, jclass, jobject assetManager, j
}
extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_YOLOv5_detectCustomLayer(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
Java_wificar_yolo_YOLOv5_detectCustomLayer(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
auto result = YoloV5CustomLayer::detector->detect(env, image, threshold, nms_threshold);
auto box_cls = env->FindClass("wificar/Box");
auto box_cls = env->FindClass("wificar/yolo/Box");
auto cid = env->GetMethodID(box_cls, "<init>", "(FFFFIF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -146,7 +146,7 @@ extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_YOLOv4_detect(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
auto result = YoloV4::detector->detect(env, image, threshold, nms_threshold);
auto box_cls = env->FindClass("wificar/Box");
auto box_cls = env->FindClass("wificar/yolo/Box");
auto cid = env->GetMethodID(box_cls, "<init>", "(FFFFIF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -178,7 +178,7 @@ extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_NanoDet_detect(JNIEnv *env, jclass, jobject image, jdouble threshold, jdouble nms_threshold) {
auto result = NanoDet::detector->detect(env, image, threshold, nms_threshold);
auto box_cls = env->FindClass("wificar/Box");
auto box_cls = env->FindClass("wificar/yolo/Box");
auto cid = env->GetMethodID(box_cls, "<init>", "(FFFFIF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -197,7 +197,7 @@ Java_wificar_NanoDet_detect(JNIEnv *env, jclass, jobject image, jdouble threshol
********************************************************************************************/
extern "C" JNIEXPORT void JNICALL
Java_wificar_SimplePose_init(JNIEnv *env, jclass clazz, jobject assetManager, jboolean useGPU) {
Java_wificar_yolo_SimplePose_init(JNIEnv *env, jclass clazz, jobject assetManager, jboolean useGPU) {
if (SimplePose::detector != nullptr) {
delete SimplePose::detector;
SimplePose::detector = nullptr;
@ -209,10 +209,10 @@ Java_wificar_SimplePose_init(JNIEnv *env, jclass clazz, jobject assetManager, jb
}
extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_SimplePose_detect(JNIEnv *env, jclass clazz, jobject image) {
Java_wificar_yolo_SimplePose_detect(JNIEnv *env, jclass clazz, jobject image) {
auto result = SimplePose::detector->detect(env, image);
auto box_cls = env->FindClass("wificar/KeyPoint");
auto box_cls = env->FindClass("wificar/yolo/KeyPoint");
auto cid = env->GetMethodID(box_cls, "<init>", "([F[FFFFFF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -287,7 +287,7 @@ extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_Yolact_detect(JNIEnv *env, jclass clazz, jobject image) {
auto result = Yolact::detector->detect_yolact(env, image);
auto yolact_mask = env->FindClass("wificar/YolactMask");
auto yolact_mask = env->FindClass("wificar/yolo/YolactMask");
// auto cid = env->GetMethodID(yolact_mask, "<init>", "(FFFFIF[F[I)V");
auto cid = env->GetMethodID(yolact_mask, "<init>", "(FFFFIF[F[C)V");
jobjectArray ret = env->NewObjectArray(result.size(), yolact_mask, nullptr);
@ -583,7 +583,7 @@ Java_wificar_DBFace_detect(JNIEnv *env, jclass clazz, jobject image, jdouble thr
auto result = DBFace::detector->detect(env, image, threshold, nms_threshold);
// LOGD("jni dbface size:%d %f %f", result.size(), threshold, nms_threshold);
auto box_cls = env->FindClass("wificar/KeyPoint");
auto box_cls = env->FindClass("wificar/yolo/KeyPoint");
auto cid = env->GetMethodID(box_cls, "<init>", "([F[FFFFFF)V");
jobjectArray ret = env->NewObjectArray(result.size(), box_cls, nullptr);
int i = 0;
@ -631,7 +631,7 @@ extern "C" JNIEXPORT jobjectArray JNICALL
Java_wificar_LightOpenPose_detect(JNIEnv *env, jclass clazz, jobject image) {
auto poses = LightOpenPose::detector->detect(env, image);
auto box_cls = env->FindClass("wificar/OpenPoseKeyPoint");
auto box_cls = env->FindClass("wificar/yolo/OpenPoseKeyPoint");
auto cid = env->GetMethodID(box_cls, "<init>", "([F[FF)V");
jobjectArray ret = env->NewObjectArray(poses.size(), box_cls, nullptr);
int i = 0;

@ -0,0 +1,55 @@
package wificar;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import com.j256.ormlite.android.AndroidConnectionSource;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import java.util.HashMap;
import java.util.Map;
import wificar.entity.InfraredSensorData;
public class Database extends OrmLiteSqliteOpenHelper {
private static Database INSTANCE;
private Database(Context context) {
super(context,DB_NAME,null,1);
}
public static Database getInstance(Context context) {
if(INSTANCE == null) INSTANCE = new Database(context);
return INSTANCE;
}
private static final String DB_NAME = "isrr.db";
private final Map<Class, Dao> daos = new HashMap<>();
public synchronized Dao getDao(Class clazz) {
if(daos.containsKey(clazz))return daos.get(clazz);
else {
try {
Dao dao = super.getDao(clazz);
daos.put(clazz,dao);
return dao;
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
return null;
}
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
// TableUtils.createTable(connectionSource,);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
}

@ -1,17 +1,15 @@
package wificar;
package wificar.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import my.wificar.R;
public class SettingsActivity extends AppCompatActivity {
public class AboutActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {

@ -1,6 +1,4 @@
package wificar;
import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
package wificar.activity;
import android.app.Activity;
import android.content.Context;
@ -13,8 +11,6 @@ import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
@ -32,7 +28,7 @@ import java.util.List;
import my.wificar.R;
public class BgPictureShowActivity extends Activity implements
public class BackgroundActivity extends Activity implements
AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {
/*
*
@ -75,7 +71,7 @@ public class BgPictureShowActivity extends Activity implements
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,
View v, int position, long id) {
Toast.makeText(BgPictureShowActivity.this, "µÚ" + (position + 1) + "ÕÅͼƬ", Toast.LENGTH_SHORT).show();
Toast.makeText(BackgroundActivity.this, "µÚ" + (position + 1) + "ÕÅͼƬ", Toast.LENGTH_SHORT).show();
}
});
} catch (Exception e) {

@ -1,8 +1,7 @@
package wificar;
package wificar.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
@ -29,8 +28,14 @@ import java.util.Timer;
import java.util.TimerTask;
import my.wificar.R;
public class MyVideo extends Activity {
import wificar.Configuration;
import wificar.Database;
import wificar.components.MySurfaceView;
import wificar.components.RockerView;
import wificar.network.SocketListener;
import wificar.network.SoundSocketListener;
public class ControlActivity extends Activity {
public static String CameraIp;
public static String CtrlIp;
public static String CtrlPort;
@ -185,14 +190,7 @@ public class MyVideo extends Activity {
xSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean b) {
try {
if(socketWriter == null) return;
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 0.9)+45), (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
changeRobotAngle(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
@ -236,7 +234,7 @@ public class MyVideo extends Activity {
try {
socketWriter = socket.getOutputStream();
socketReader = socket.getInputStream();
socketListener2001 = new SocketListener(activity,socketReader);
socketListener2001 = new SocketListener(activity, Database.getInstance(this),socketReader);
socketListener2002 = new SoundSocketListener(activity,soundSocket.getInputStream());
} catch (Exception e) {
// TODO Auto-generated catch block
@ -247,6 +245,16 @@ public class MyVideo extends Activity {
rockerLayout.addView(rockerView);
//Toast.makeText(this,"³õʼ»¯ÍøÂçʧ°Ü£¡"+e.getMessage(),Toast.LENGTH_LONG).show();
}
public void changeRobotAngle(int progress) {
try {
if(socketWriter == null) return;
socketWriter.write(new byte[]{(byte) 0xff, (byte) 0x01, (byte) 0x08, (byte)((int)(progress * 0.9)+45), (byte) 0xff});
socketWriter.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void onDestroy() {
super.onDestroy();

@ -1,31 +1,21 @@
package wificar;
/*Rwww.xiao-r.com
* FPV-WIFI·www.wifi-robots.com
*
* R
* */
package wificar.activity;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Toast;
import java.util.Random;
import my.wificar.R;
import wificar.Configuration;
import wificar.yolo.SimplePose;
import wificar.yolo.YOLOv5;
public class MyMainFrm extends Activity {
public class MainActivity extends Activity {
// EditText CameraIP, ControlIP, Port;
LinearLayout Button_go;
@ -76,7 +66,7 @@ public class MyMainFrm extends Activity {
intent.putExtra("Is_Scale", true);
//设置Intent对象要启动的Activity
intent.setClass(MyMainFrm.this, MyVideo.class);
intent.setClass(MainActivity.this, ControlActivity.class);
//通过Intent对象启动另外一个Activity
startActivity(intent);
});
@ -92,7 +82,7 @@ public class MyMainFrm extends Activity {
intent.putExtra("Is_Scale", true);
//设置Intent对象要启动的Activity
intent.setClass(MyMainFrm.this, SettingsActivity.class);
intent.setClass(MainActivity.this, AboutActivity.class);
//通过Intent对象启动另外一个Activity
startActivity(intent);
});

File diff suppressed because it is too large Load Diff

@ -1,47 +1,27 @@
package wificar;
/*Rwww.xiao-r.com
* FPV-WIFI·www.wifi-robots.com
*
* R
* */
package wificar.components;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Size;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.LifecycleOwner;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@ -50,13 +30,19 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.ByteBuffer;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import my.wificar.R;
import wificar.Configuration;
import wificar.activity.ControlActivity;
import wificar.yolo.Box;
import wificar.yolo.Constant;
import wificar.yolo.KeyPoint;
import wificar.yolo.SimplePose;
import wificar.yolo.YOLOv5;
import wseemann.media.FFmpegMediaMetadataRetriever;
public class MySurfaceView extends SurfaceView implements Callback {
@ -74,12 +60,12 @@ public class MySurfaceView extends SurfaceView implements Callback {
private Bitmap mBitmap;
private boolean isThreadRunning = true;
private MyVideo activity;
private ControlActivity activity;
private MySurfaceView floatingView;
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
activity = (MyVideo) context;
activity = (ControlActivity) context;
Constant.context = context;
initialize();
p = new Paint();

File diff suppressed because it is too large Load Diff

@ -1,4 +1,4 @@
package wificar;
package wificar.components;
import android.app.Activity;
import android.content.Context;

@ -0,0 +1,14 @@
package wificar.entity;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable
public class InfraredSensorData {
@DatabaseField(id = true)
public long id;
@DatabaseField
public long time;
@DatabaseField
public boolean status;
}

@ -0,0 +1,16 @@
package wificar.entity;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable
public class LivingFeatureData {
@DatabaseField(id = true)
public long id;
@DatabaseField
public long time;
@DatabaseField
public double distance;
@DatabaseField
public boolean status;
}

@ -0,0 +1,14 @@
package wificar.entity;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
@DatabaseTable
public class UltraSoundSensorData {
@DatabaseField(id = true)
public long id;
@DatabaseField
public long time;
@DatabaseField
public double distance;
}

@ -1,4 +1,4 @@
package wificar;
package wificar.network;
import android.app.Activity;
import android.content.Intent;
@ -6,6 +6,7 @@ import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Environment;
import android.se.omapi.Session;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@ -18,16 +19,27 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import java.util.Calendar;
import my.wificar.R;
import wificar.Configuration;
import wificar.Database;
import wificar.entity.InfraredSensorData;
import wificar.entity.UltraSoundSensorData;
public class SocketListener {
private Activity activity;
private InputStream inputStream;
private Database database;
public SocketListener(Activity activity,InputStream inputStream) {
public void onOpen(Session session){}
public void onClose(Session session){}
public SocketListener(Activity activity,Database database,InputStream inputStream) {
this.activity = activity;
this.inputStream = inputStream;
this.database = database;
AsyncTask.execute(()->{
while (true) {
@ -42,6 +54,8 @@ public class SocketListener {
}
} catch (IOException e) {
throw new RuntimeException(e);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
});
@ -51,14 +65,14 @@ public class SocketListener {
try {
Thread.sleep(1000);
onMessage1(0);
} catch (InterruptedException e) {
} catch (InterruptedException | SQLException e) {
throw new RuntimeException(e);
}
}
});
}
int count = 0;
private void onMessage1(int inputValue) {
private void onMessage1(int inputValue) throws SQLException {
//TODO
activity.runOnUiThread(()->{
TextView textComponent = activity.findViewById(R.id.showLive);
@ -79,11 +93,19 @@ public class SocketListener {
redCircle.setVisibility(View.VISIBLE);
}
});
// InfraredSensorData data = new InfraredSensorData();
// data.time = Calendar.getInstance().getTimeInMillis();
// data.status = (inputValue == 1);
// database.getDao(InfraredSensorData.class).create(data);
}
private void onMessage2(int inputValue) {
private void onMessage2(int inputValue) throws SQLException {
activity.runOnUiThread(()->{
TextView textView = activity.findViewById(R.id.distance);
textView.setText(inputValue+"");
});
// UltraSoundSensorData data = new UltraSoundSensorData();
// data.time = Calendar.getInstance().getTimeInMillis();
// data.distance = inputValue;
// database.getDao(UltraSoundSensorData.class).create(data);
}
}

@ -1,4 +1,4 @@
package wificar;
package wificar.network;
import android.app.Activity;
import android.os.AsyncTask;

@ -1,4 +1,4 @@
package wificar;
package wificar.yolo;
import android.graphics.Color;
import android.graphics.RectF;

@ -1,4 +1,4 @@
package wificar;
package wificar.yolo;
/*Rwww.xiao-r.com
* FPV-WIFI·www.wifi-robots.com
*

@ -1,4 +1,4 @@
package wificar;
package wificar.yolo;
public class KeyPoint {

@ -1,4 +1,4 @@
package wificar;
package wificar.yolo;
import android.content.res.AssetManager;
import android.graphics.Bitmap;

@ -1,8 +1,10 @@
package wificar;
package wificar.yolo;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import wificar.yolo.Box;
public class YOLOv5 {
static {
System.loadLibrary("yolov5");

@ -5,7 +5,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/settings_background"
tools:context="wificar.SettingsActivity">
tools:context="wificar.activity.AboutActivity">
<Button
android:id="@+id/back"

@ -4,7 +4,7 @@
android:layout_width="fill_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="fill_parent">
<!-- <wificar.RockerView-->
<!-- <wificar.components.RockerView-->
<!-- android:layout_width="100dp"-->
<!-- android:layout_height="100dp"-->
<!-- android:layout_marginStart="200dp"-->
@ -13,7 +13,7 @@
<!-- android:layout_marginBottom="200dp"-->
<!-- android:visibility="visible"-->
<!-- tools:visibility="visible" />-->
<wificar.MySurfaceView
<wificar.components.MySurfaceView
android:id="@+id/mySurfaceViewVideo"
android:layout_width="match_parent"
android:layout_height="match_parent"

Loading…
Cancel
Save