javascript - 将 p5.Image 转换为 p5.Element Dom Image 后的关键点错误
问题描述
我想在某个时刻从网络摄像头拍摄单张图像,然后发送到poseNet.singlePose以获取关键点并根据我需要的区域裁剪该图像。但它确实有错误的关键点,裁剪后的图像不是我需要的区域。但如果我这样做
poseNet = ml5.poseNet(video, options, modelReady);
然后图像裁剪效果很好。因此,仅当我只想将单个图像发送到poseNet 时才会出现问题。
let img = video.get(0,0,width,height);
globalImage = img;
let imgElement = new Image();
imgElement.src = img.canvas.toDataURL();
imgElement.width = width;
imgElement.height = height;
poseNet.singlePose(imgElement);
并且裁剪发生在姿势事件侦听器中我这样做
let img = pImage.get(x,y,w,h);
p.image(img, 0, 0, p.width, p.height);
我做错了什么?
解决方案
作为一个修补程序,这似乎在 Promise 中起作用:
poseNet.singlePose(img_dom).then((results) => {
pose = results[0].pose;
});
但是为什么如果我这样做它不起作用:
poseNet.on('pose', p.gotPoses);
gotPoses 回调接收到具有错误关键点的姿势
如果你想使用estimateSinglePose然后这样做
<html>
<body>
<!-- Load TensorFlow.js -->
<script src="https://unpkg.com/@tensorflow/tfjs"></script>
<!-- Load Posenet -->
<script src="https://unpkg.com/@tensorflow-models/posenet">
</script>
<script type="text/javascript">
posenet.load().then(function(net) {
// posenet model loaded
});
</script>
</body>
</html>
const imageScaleFactor = 0.50;
const flipHorizontal = false;
const outputStride = 16;
const imageElement = document.getElementById('cat');// load the posenet model
const net = await posenet.load();
const pose = await net.estimateSinglePose(imageElement, imageScaleFactor, flipHorizontal, outputStride);
推荐阅读
- c# - 将 DataRow 转换为 T 类型时,C# Int64Converter 无法从 System.Int64 错误转换
- django - 带有非英文字符的 django python 密码重置电子邮件主题
- linux-kernel - 在 URB 完成例程中调用 send_sig_info() 是否安全?
- android - 无法解析 com.google.android.gms.ads.MobileAds
- javascript - Websocket - 在应用程序在后台和前夕期间断开用户 Android/iOS
- android - 如何在android Matlab中获取文件的路径
- entity-framework - 实体框架6代码中的多对多关系优先
- python - 随机游走得到不好的结果
- c# - 如何在 RocksDbSharp 的 read_options 中设置 prefix_same_as_start
- c# - 程序在 main 方法后结束