如何剪切我作为faceViewBounds收到的框架,使脸部周围形成一个大圆圈?这就像是一个面对人的徽章.
也许我应该得到faceViewBounds的中心然后我必须在ImageView.image中找到这个中心并绘制一个大直径的圆,然后通过逻辑切割其余的圆圈,但是使用代码我不知道该怎么做.. 有什么建议?
func detectFaceFrom(ImageView theImageView: UIImageView) {
guard let personImage = CIImage(image: theImageView.image!) else {
return
}
let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyLow]
let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
let faces = faceDetector?.features(in: personImage)
let ciImageSize = personImage.extent.size
var transform = CGAffineTransform(scaleX: 1, y: -1)
transform = transform.translatedBy(x: 0, y: -ciImageSize.height)
if(faces?.count==1){
for face in faces as! [CIFaceFeature] {
var faceViewBounds = face.bounds.applying(transform)
let viewSize = theImageView.bounds.size
let scale = min(viewSize.width / ciImageSize.width,
viewSize.height / ciImageSize.height)
let …
Run Code Online (Sandbox Code Playgroud) 我正在使用Vision
框架来检测多个图像上的面部和对象,并且工作得非常好.
但我有一个在文档上找不到的问题.iOS上的照片应用程序对脸部进行分类,您可以单击脸部并使用此脸部显示所有图像.
如何对照片应用等面部进行分类?是否有任何唯一标识符或类似标识?
谢谢!
我看到了一些访问 THREE.BoxGeometry 面的解决方案,如下所示:
var geometry = new THREE.BoxGeometry(n,n,n)
let faces = geometry.faces;
for (let face of faces) {
face.color.set(Math.random() * 0xffffff);
}
Run Code Online (Sandbox Code Playgroud)
faces
但当前 Three.js 版本 r129 中似乎不存在 -array ( Uncaught TypeError: faces is not iterable
)。
如何轻松为六个立方体面着色?
我实际上发现了这个问题,但它说material.color
并不存在.我需要知道如何更改我正在绘制的立方体的各个面的颜色:
var newCube = new THREE.Mesh(new three.CubeGeometry(size, size, size), new three.MeshNormalMaterial({ vertexColors: three.FaceColors }));
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ARKit的3D Face Mesh获得眼睛的宽度和2只眼睛的距离.
我使用 过ARAnchor的CATransform3D ;
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
Run Code Online (Sandbox Code Playgroud)
以下是我的代码;
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor else { return }
let leftcaTransform3DValue : CATransform3D = (faceAnchor.blendShapes[.eyeBlinkLeft]?.caTransform3DValue)!
let rightcaTransform3DValue : CATransform3D = (faceAnchor.blendShapes[.eyeBlinkRight]?.caTransform3DValue)!
print(" m11 : \(String(describing:leftcaTransform3DValue.m11)) m12 : \(String(describing:leftcaTransform3DValue.m12)) m13 : \(String(describing:leftcaTransform3DValue.m13)) m14 : \(String(describing:leftcaTransform3DValue.m14)) …
Run Code Online (Sandbox Code Playgroud) 我已经为一个问题苦苦挣扎了一个星期,我无法像这张图片中的左脸一样将一张脸从非正面旋转到同一张图片中的右脸一样的正面。
1)。我在learnopencv网站上使用了一个关于delaunay的教程来获取左面的所有三角形(大约138个三角形),如下所示:
...
triangle num 4: [100, 383] | [120, 374] | [112, 385]
triangle num 5: [120, 374] | [100, 383] | [92, 345]
triangle num 6: [136, 396] | [137, 379] | [151, 394]
triangle num 7: [137, 379] | [136, 396] | [118, 395]
triangle num 8: [92, 345] | [86, 414] | [80, 451]
triangle num 9: [86, 414] | [92, 345] | [100, 383]
triangle num 10: [86, 414] | [100, 383] | …
Run Code Online (Sandbox Code Playgroud) 第一次在这里发帖,我会尽力描述问题。我正在尝试使用 opencv、dlib 和网络摄像头数据实时为 3D 虚拟角色的面部设置动画,类似于此软件等花哨的应用程序
遵循此处的示例并使用网络摄像头,我可以获得屏幕空间中的实时 2D 面部标志数据以及头部姿势的 3D 平移数据的估计。但我真正想知道的是面部标志的估计 3D 世界坐标。例如,当头部向一侧倾斜 30 度时,嘴巴看起来就像演员用他/她的嘴发出“w”声一样。
谁能告诉我使用估计的头部姿势将这些 2d 面部标志转换为 3D 数据的策略是什么,或者这是否使这些实时面部动画应用程序如此昂贵?
std::vector<cv::Point3d> object_pts;
std::vector<cv::Point2d> image_pts;
std::vector<cv::Point3d> reprojectsrc;
std::vector<cv::Point2d> reprojectdst;
cv::Mat rotation_vec;
cv::Mat rotation_mat;
cv::Mat translation_vec;
cv::Mat pose_mat;
cv::Mat euler_angle;
cv::Mat cam_matrix;
cv::Mat dist_coeffs;
cv::Mat out_intrinsics;
cv::Mat out_rotation;
cv::Mat out_translation;
int UpdateFace(dlib::cv_image<dlib::bgr_pixel> cimg, dlib::rectangle face)
{
// get facial landmarks
shape = predictor(cimg, face);
// draw facial landmarks
for (unsigned int i = 0; i < 68; …
Run Code Online (Sandbox Code Playgroud) 在搜索了互联网、我自己的 Pixel 手机以及至少一款使用面部解锁的应用程序后,我发现这个图标被用作面部解锁功能的符号。但是,无论是在 Material Design UI 套件还是任何其他官方来源中,我都没有找到可用于模型目的的可下载图像。
这是标准的 Android 图标吗?在哪里可以下载合法的 SVG 或 PNG?
我正在尝试使用 Face3 创建网格。我在打字稿项目中使用 Threejs。我面临着几个问题。
const points = [
new Face3(-1, 1, -1),//c
new Face3(-1, -1, 1),//b
new Face3(1, 1, 1),//a
new Face3(1, 1, 1),//a
new Face3(1, -1, -1),//d
new Face3(-1, 1, -1),//c
new Face3(-1, -1, 1),//b
new Face3(1, -1, -1),//d
new Face3(1, 1, 1),//a
new Face3(-1, 1, -1),//c
new Face3(1, -1, -1),//d
new Face3(-1, -1, 1),//b
]
let geometry = new Geometry();
for (const point of points) {
geometry.faces.push(point);
}
Run Code Online (Sandbox Code Playgroud)
首先,我无法将此几何体添加到网格中。它给我错误,它不是BufferGeometry
如果我尝试从 Geomtery 创建新的 BufferGeometry,我找不到fromGeometry属性
如果这些类型的函数已被弃用,那么确切的替代方案是什么?为什么没有适当的指南或说明?有谁可以建议我更好的解决方案。
我有一个THREE.PlaneGeometry
,有ComputeFaceNormals()
.我使用这个几何体创建了两个网格,并对它们应用了不同的旋转.我想计算相机和两个网格中心面法线之间的两个角度.它应该是 :
vLocalCamera = vCamera.position - mesh1.position;
mesh1.normal() . vLocalCamera = cos(angle);
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何使用three.js API在世界坐标(来自几何和网格旋转)中获得网格法线
我试图将两个几何/网格(红色和蓝色)合并为一个独特的几何/网格.但是在创建一个新几何体并应用geometry.merge()之后,我发现所有内部顶点和面仍然存在(绿色区域).
我想删除所有额外的信息,因为它会在渲染的面上产生视觉毛刺,而且我也无法正确计算合并的体积.我需要像最后一张图片一样的东西,一个只包含最小外部/外部的网格面和顶点,删除内部的.
我尝试应用ThreeCSG来减去网格,但我发现它在尝试加载大型模型时不断崩溃.我还尝试使用raycaster来检测常见的面孔,但这对大型模型的性能也有很大的影响.
ThreeCSG是唯一的好选择吗?但由于我不能在每个模型上使用它,我应该丢弃它.我想快速应用一些不太依赖于网格三角形数量的东西.
import numpy
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
这是我的代码,我得到这个错误 1.Module 'cv2' 没有 'VideoCapture' 成员 2.Module 'cv2' 没有 'imshow' 成员 3.Module 'cv2' 没有 'waitKey' 成员 4.Module 'cv2' 有没有“destroyAllWindows”成员
尝试用不同的颜色绘制每个立方体面时,我发现了一个螺纹,提出了一种实现此目的的方法:
var geometry = new THREE.BoxGeometry(5, 5, 5);
for (var i = 0; i < geometry.faces.length; i++) {
geometry.faces[i].color.setHex(Math.random() * 0xffffff);
}
var material = new THREE.MeshBasicMaterial({
color: 0xffffff,
vertexColors: THREE.FaceColors
});
Run Code Online (Sandbox Code Playgroud)
但是使用three.js r86,我得到以下结果:
得到了组成每个面孔的三角形,分别绘制。
为了达到理想的效果,我对上面的代码进行了以下修改:
var geometry = new THREE.BoxGeometry(5, 5, 5);
for ( var i = 0; i < geometry.faces.length; i += 2 ) {
var faceColor = Math.random() * 0xffffff;
geometry.faces[i].color.setHex(faceColor);
geometry.faces[i+1].color.setHex(faceColor);
}
var material = new THREE.MeshBasicMaterial({
color: 0xffffff,
vertexColors: THREE.FaceColors
});
Run Code Online (Sandbox Code Playgroud)
但这一切似乎有点奏效了!