最后编辑于2020-05
本帖主要示例人流量统计-动态版接口。通过读取视频转图片识别。直接获取摄像头的识别示例请访问http://ai.baidu.com/forum/topic/show/940536
ffmepg javacv 请自行百度了解一下
【Java】人流量统计-动态版之摄像头识别显示 http://ai.baidu.com/forum/topic/show/940536
- 需要用到的jar
//xml格式会丢失标签。社区技术要看一下哦。语言最好也支持xml 开发者们自行访问 URL地址 复制maven的xml配置内容即可
// URL: https://mvnrepository.com/artifact/org.bytedeco/javacv
compile group: 'org.bytedeco', name: 'javacv', version: '1.4.1'
// URL: https://mvnrepository.com/artifact/com.alibaba/fastjson
compile group: 'com.alibaba', name: 'fastjson', version: '1.2.35'
// URL: https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/ffmpeg-platform
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg-platform', version: '3.2.1-1.3'
- 需要用到的Java工具类
FileUtil=https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
Base64Util=https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
HttpUtil=https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
- 小帅写的工具类(仅供参考不接受批评code low不low)
import java.awt.image.BufferedImage;
import java.io.IOException;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.Java2DFrameConverter;
/**
* 视频转图片
* @author 小帅丶
*/
public class VideoFrame2ImageUtil {
private static FFmpegFrameGrabber fFmpegFrameGrabber;
/**
* 获取视频一帧内容转为BufferedImage
* 将视频文件帧处理并以“jpg”格式进行存储。
* 依赖FrameToBufferedImage方法:将frame转换为bufferedImage对象
* @param videoPath 视频本地路径地址包含视频文件名称和后缀名
*/
public static BufferedImage getVideoFramer4bufferedImage(String videoPath) {
//Frame对象
Frame frame = null;
BufferedImage bufferedImage = null;
//获取视频文件
fFmpegFrameGrabber = new FFmpegFrameGrabber(videoPath);
try {
fFmpegFrameGrabber.start();
//获取视频每秒的帧数
double secondFramr = fFmpegFrameGrabber.getFrameRate();
System.out.println("视频一秒的帧数: " + secondFramr);
//获取视频总帧数
int ftp = fFmpegFrameGrabber.getLengthInFrames();
System.out.println("视频时长(秒): " + ftp/fFmpegFrameGrabber.getFrameRate());
System.out.println("开始运行视频提取一帧并返回BufferedImage,耗时较短");
// 获取帧
frame = fFmpegFrameGrabber.grabImage();
if (frame != null) {
bufferedImage = FrameToBufferedImage(frame);
}
System.out.println("============运行结束============");
fFmpegFrameGrabber.stop();
fFmpegFrameGrabber.close();
} catch (IOException e) {
System.out.println("出现异常了"+e.getMessage());
}
return bufferedImage;
}
/**
* FrameToBufferedImage Frame转BufferedImage
* @param frame
* @return BufferedImage
*/
public static BufferedImage FrameToBufferedImage(Frame frame) {
// 创建BufferedImage对象
Java2DFrameConverter converter = new Java2DFrameConverter();
BufferedImage bufferedImage = converter.getBufferedImage(frame);
return bufferedImage;
}
- 调用接口示例代码
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.net.URLEncoder;
import javax.imageio.ImageIO;
import cn.xsshome.util.Base64Util;
import cn.xsshome.util.HttpUtil;
import cn.xsshome.util.VideoFrame2ImageUtil;
/**
* 视频帧转图片请求人流量统计(动态版)接口
* @author 小帅丶
*
*/
public class BodyTrackingAPISample {
//人流量统计(动态版)接口地址
private static String BODY_TRACKING_URL="https://aip.baidubce.com/rest/2.0/image-classify/v1/body_tracking";
public static void main(String[] args) throws Exception {
String access_token = "token";
String videoPath = "本地一个视频文件路径";
BufferedImage bufferedImage = VideoFrame2ImageUtil.getVideoFramer4bufferedImage(videoPath);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpg", baos);
//转为base64
String base64 = Base64Util.encode(baos.toByteArray());
String params = "image="+URLEncoder.encode(base64,"utf-8")+"&dynamic=false&show=true";
String result = HttpUtil.post(BODY_TRACKING_URL, access_token, params );
System.out.println(result);
}
}
TOP
切换版块
这个不清楚。建议你自己研究研究。
楼主 想问下 咱这个可以连接指定的摄像头吗 不是本地的
博文就都是亲测OK才分享的。
源码地址另一篇文章提供了。 项目代码地址 https://gitee.com/xshuai/bodyTrack 全部源码提供的。
楼主Exception in thread "main" java.lang.NoClassDefFoundError: org/bytedeco/ffmpeg/avformat/Read_packet_Pointer_BytePointer_int这是什么错百度不出来.......楼主这个能不能给份源代码或者教我一下怎么导入抽帧的图片序列我只会导入一张图片.........
写的很用心
其实这个就是市面上客流相机的算法、如果有做这方面算法的朋友可以问问+
你做成功了吗
这个不太清楚哦。提交工单咨询一下百度官方人员吧。
这个怎么能记录来和走人的人数
还是不知道视频转图片之后咋统计的人流量。
main方法运行。需要会Java、Maven。最好Maven搭建
你好 我想问问这个项目怎么运行呢
应该是吧。我也没太多研究过。只是给大家实现一下效果。
这个每秒多少帧是摄像头决定的?
强悍,有没有python版的代码
一起期待
楼主真的费心啦
动态版比静态难多了,之于我很有用
代码很实用,点赞
不错