package com.wzt.yolov5;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.camera.core.CameraX;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.core.ImageAnalysisConfig;
import androidx.camera.core.ImageProxy;
import androidx.camera.core.Preview;
import androidx.camera.core.PreviewConfig;
import androidx.camera.core.UseCase;
import androidx.core.app.ActivityCompat;
import androidx.lifecycle.LifecycleOwner;
import android.Manifest;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ImageFormat;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.YuvImage;
import android.os.Bundle;
import android.util.Size;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
import wseemann.media.FFmpegMediaMetadataRetriever;
public class MainActivity extends AppCompatActivity {
public static int YOLOV5S = 1;
public static int USE_MODEL = YOLOV5S;
public static boolean USE_GPU = false;
private static final int REQUEST_CAMERA = 1;
private int width;
private int height;
private double threshold = 0.3f;
private double nms_threshold = 0.7f;
private long total_time;
int fps_count = 0;
private long startTime = 0;
private long endTime = 0;
public static String location_id;//位置id
private int lastNum;//上次人数
private int NumOfPeople=0;//当前人数
public static int time_interval=2000;//识别时间间隔(毫秒)
private static PostRequest_Interface request;
private Toolbar toolbar;
private ImageView resultImageView;
private TextView tvInfo;
private TextureView viewFinder;
protected Bitmap mutableBitmap;
FFmpegMediaMetadataRetriever mmr;
public static CameraX.LensFacing CAMERA_ID = CameraX.LensFacing.BACK;
ExecutorService detectService = Executors.newSingleThreadExecutor();
private static String[] PERMISSIONS_CAMERA = {Manifest.permission.CAMERA};
private AtomicBoolean detectCamera = new AtomicBoolean(false);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int permission = ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
PERMISSIONS_CAMERA,
REQUEST_CAMERA
);
finish();
}
YOLOv5.init(getAssets(), USE_GPU);
toolbar = findViewById(R.id.tool_bar);
resultImageView = findViewById(R.id.imageView);
tvInfo = findViewById(R.id.tv_info);
viewFinder = findViewById(R.id.view_finder);
toolbar.setNavigationIcon(R.drawable.actionbar_dark_back_icon);
toolbar.setNavigationOnClickListener(v -> finish());
//步骤4:创建Retrofit对象
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://192.168.3.107:8080/hesuan/") // 设置 网络请求 Url
.addConverterFactory(GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖)
.build();
// 步骤5:创建 网络请求接口 的实例
request = retrofit.create(PostRequest_Interface.class);
viewFinder.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {
updateTransform();
}
});
viewFinder.post(new Runnable() {
@Override
public void run() {
startCamera();
}
});
}
private void updateTransform() {
Matrix matrix = new Matrix();
// Compute the center of the view finder
float centerX = viewFinder.getWidth() / 2f;
float centerY = viewFinder.getHeight() / 2f;
float[] rotations = {0, 90, 180, 270};
// Correct preview output to account for display rotation
float rotationDegrees = rotations[viewFinder.getDisplay().getRotation()];
matrix.postRotate(-rotationDegrees, centerX, centerY);
// Finally, apply transformations to our TextureView
viewFinder.setTransform(matrix);
}
private void startCamera() {
CameraX.unbindAll();
PreviewConfig previewConfig = new PreviewConfig.Builder()
.setLensFacing(CAMERA_ID)
//.setTargetAspectRatio(Rational.NEGATIVE_INFINITY) // 宽高比
.setTargetResolution(new Size(480, 640)) // 分辨率
.build();
Preview preview = new Preview(previewConfig);
preview.setOnPreviewOutputUpdateListener(new Preview.OnPreviewOutputUpdateListener() {
@Override
public void onUpdated(Preview.PreviewOutput output) {
ViewGroup parent = (ViewGroup) viewFinder.getParent();
parent.removeView(viewFinder);
parent.addView(viewFinder, 0);
viewFinder.setSurfaceTexture(output.getSurfaceTexture());
updateTransform();
}
});
DetectAnalyzer detectAnalyzer = new DetectAnalyzer();
CameraX.bindToLifecycle((LifecycleOwner) this, preview, gainAnalyzer(detectAnalyzer));
}
private UseCase gainAnalyzer(DetectAnalyzer detectAnalyzer) {
ImageAnalysisConfig.Builder analysisConfigBuilder = new ImageAnalysisConfig.Builder();
analysisConfigBuilder.setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE);
analysisConfigBuilder.setTargetResolution(new Size(480, 640)); // 输出预览图像尺寸
ImageAnalysisConfig config = analysisConfigBuilder.build();
ImageAnalysis analysis = new ImageAnalysis(config);
analysis.setAnalyzer(detectAnalyzer);
return analysis;
}
private class DetectAnalyzer implements ImageAnalysis.Analyzer {
@Override
public void analyze(ImageProxy image, final int rotationDegrees) {
detectOnModel(image, rotationDegrees);
}
}
private void detectOnModel(ImageProxy image, final int rotationDegrees) {
if (detectCamera.get()) {
return;
}
startTime = System.currentTimeMillis();
//用于控制识别时间间隔
if((startTime-endTime)<time_interval){
return;
}
detectCamera.set(true);
final Bitmap bitmapsrc = imageToBitmap(image); // 格式转换
if (detectService == null) {
detectCamera.set(false);
return;
}
detectService.execute(new Runnable() {
@Override
public void run() {
Matrix matrix = new Matrix();
matrix.postRotate(rotationDegrees);
width = bitmapsrc.getWidth();
height = bitmapsrc.getHeight();
Bitmap bitmap = Bitmap.createBitmap(bitmapsrc, 0, 0, width, height, matrix, false);
detectAndDraw(
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【探索人工智能的宝藏之地】 无论您是计算机相关专业的在校学生、老师,还是企业界的探索者,这个项目都是为您量身打造的。无论您是初入此领域的小白,还是寻求更高层次进阶的资深人士,这里都有您需要的宝藏。不仅如此,它还可以作为毕设项目、课程设计、作业、甚至项目初期的立项演示。 【人工智能的深度探索】 人工智能——模拟人类智能的技术和理论,使其在计算机上展现出类似人类的思考、判断、决策、学习和交流能力。这不仅是一门技术,更是一种前沿的科学探索。 【实战项目与源码分享】 我们深入探讨了深度学习的基本原理、神经网络的应用、自然语言处理、语言模型、文本分类、信息检索等领域。更有深度学习、机器学习、自然语言处理和计算机视觉的实战项目源码,助您从理论走向实践,如果您已有一定基础,您可以基于这些源码进行修改和扩展,实现更多功能。 【期待与您同行】 我们真诚地邀请您下载并使用这些资源,与我们一起在人工智能的海洋中航行。同时,我们也期待与您的沟通交流,共同学习,共同进步。让我们在这个充满挑战和机遇的领域中共同探索未来!
资源推荐
资源详情
资源评论
收起资源包目录
人工智能项目资料-基于排队论和图像识别的核酸检测预约系统.zip (757个子文件)
libncnn.a 16.84MB
libncnn.a 13.62MB
libncnn.a 13.59MB
libncnn.a 7.55MB
libMachineIndependent.a 4.89MB
libMachineIndependent.a 3.7MB
libMachineIndependent.a 3.44MB
libMachineIndependent.a 3.14MB
libSPIRV.a 1.7MB
libSPIRV.a 1.13MB
libSPIRV.a 990KB
libSPIRV.a 920KB
libglslang.a 109KB
libglslang.a 57KB
libglslang.a 56KB
libglslang.a 45KB
libGenericCodeGen.a 34KB
libGenericCodeGen.a 25KB
libGenericCodeGen.a 23KB
libGenericCodeGen.a 17KB
libOSDependent.a 6KB
libOSDependent.a 5KB
libOSDependent.a 5KB
libOSDependent.a 4KB
libOGLCompiler.a 4KB
libOGLCompiler.a 4KB
libOGLCompiler.a 4KB
libOGLCompiler.a 3KB
gradlew.bat 2KB
yolov5.bin 26.97MB
glslangTargets.cmake 4KB
glslangTargets.cmake 4KB
glslangTargets.cmake 4KB
glslangTargets.cmake 4KB
ncnn.cmake 4KB
ncnn.cmake 4KB
ncnn.cmake 4KB
ncnn.cmake 4KB
SPIRVTargets.cmake 4KB
SPIRVTargets.cmake 4KB
SPIRVTargets.cmake 4KB
SPIRVTargets.cmake 4KB
OSDependentTargets.cmake 3KB
OSDependentTargets.cmake 3KB
OSDependentTargets.cmake 3KB
OSDependentTargets.cmake 3KB
OGLCompilerTargets.cmake 3KB
OGLCompilerTargets.cmake 3KB
OGLCompilerTargets.cmake 3KB
OGLCompilerTargets.cmake 3KB
glslangTargets-release.cmake 2KB
glslangTargets-release.cmake 2KB
glslangTargets-release.cmake 2KB
glslangTargets-release.cmake 2KB
ncnnConfig.cmake 1KB
ncnnConfig.cmake 1KB
ncnnConfig.cmake 1KB
ncnnConfig.cmake 1KB
OSDependentTargets-release.cmake 826B
OGLCompilerTargets-release.cmake 826B
OGLCompilerTargets-release.cmake 826B
OSDependentTargets-release.cmake 826B
OSDependentTargets-release.cmake 826B
OGLCompilerTargets-release.cmake 826B
OGLCompilerTargets-release.cmake 826B
OSDependentTargets-release.cmake 826B
SPIRVTargets-release.cmake 784B
SPIRVTargets-release.cmake 784B
SPIRVTargets-release.cmake 784B
SPIRVTargets-release.cmake 784B
ncnn-release.cmake 777B
ncnn-release.cmake 777B
ncnn-release.cmake 777B
ncnn-release.cmake 777B
mvnw.cmd 7KB
YoloV5.cpp 5KB
jni_interface.cpp 2KB
.gitignore 395B
.gitignore 215B
.gitignore 7B
build.gradle 3KB
build.gradle 592B
settings.gradle 41B
gradlew 5KB
core_c.h 126KB
Types.h 87KB
Types.h 87KB
Types.h 87KB
Types.h 87KB
msa_macros.h 81KB
types_c.h 70KB
mat.h 67KB
mat.h 67KB
mat.h 67KB
mat.h 67KB
intermediate.h 57KB
intermediate.h 57KB
intermediate.h 57KB
intermediate.h 57KB
imgproc_c.h 50KB
共 757 条
- 1
- 2
- 3
- 4
- 5
- 6
- 8
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功