【问题标题】:opencv face recognition LBPH issueopencv人脸识别LBPH问题
【发布时间】:2021-09-14 19:13:32
【问题描述】:

两天来我一直在努力寻找一种合适的方法来使用 opencv 在 rust 中初始化 PtrOfLBPHFaceRecognizer。

let mut void_pointer = libc::malloc(mem::size_of::<c_void>() as libc::size_t) as *mut c_void;
if void_pointer.is_null() {
    panic!("failed to allocate memory");
}

let mut model = PtrOfLBPHFaceRecognizer::from_raw(void_pointer);
let ptr = PtrOfLBPHFaceRecognizer::init(model);
let mut model = PtrOfLBPHFaceRecognizer::deref_mut(ptr);
model.train(&images,&labels);

结果是内存引用无效的恐慌。

感谢任何想法。

【问题讨论】:

标签: opencv rust face-recognition ffi dlib


【解决方案1】:

您可以通过调用create 方法来做到这一点。 C++ 中用于初始化它的默认参数也在docs 中进行了描述。

use opencv::face::prelude::*;

// According to docs, these values are the defaults used in C++
let mut model: PtrOfLBPHFaceRecognizer = <dyn LBPHFaceRecognizer>::create(1, 8, 8, 8, DBL_MAX).unwrap();

【讨论】:

  • 我猜类型注解是多余的?
  • 实际上,我认为这行不通:例如参见this playground。你可以做&lt;dyn LBPHFaceRecognizer&gt;::create,但我不相信图书馆应该是这样使用的……¯\_(ツ)_/¯
  • @eggyal 看起来你是对的。他们选择为dyn LBPHFaceRecognizer 实现它似乎很奇怪,但我想这是尝试为 C 库建立稳定接口的副作用。我在阅读文档时完全错过了这一点。
  • 使用这样的界面很奇怪,但它有效,我试过了。也许创建环绕默认值的合并请求会很好。谢谢你的帮助@Locke
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2016-09-03
  • 2016-09-18
  • 2018-09-15
  • 2019-08-10
  • 2011-02-20
  • 2017-02-26
相关资源
最近更新 更多