国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上

這篇具有很好參考價(jià)值的文章主要介紹了Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 前言

上篇文章 我們已經(jīng)通過一個(gè)簡(jiǎn)單的例子,在Android Studio中接入了OpenCV。
之前我們也 在Visual Studio上,使用OpenCV實(shí)現(xiàn)人臉識(shí)別 中實(shí)現(xiàn)了人臉識(shí)別的效果。
接著,我們就可以將OpenCV的人臉識(shí)別效果移植到Android中了。

1.1 環(huán)境說明

  • 操作系統(tǒng) : windows 10 64
  • Android Studio版本 : Android Studio Giraffe | 2022.3.1
  • OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版)

1.2 實(shí)現(xiàn)效果

先來看下實(shí)現(xiàn)效果,識(shí)別到的人臉會(huì)用紅框框出來。

Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上,音視頻開發(fā),android,opencv,人工智能,圖像識(shí)別,人臉識(shí)別
接下來我們來一步步實(shí)現(xiàn)上述的效果。

2. 前置操作

2.1 添加權(quán)限

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
ActivityCompat.requestPermissions(
    this@FaceDetectionActivity,
    arrayOf(
        Manifest.permission.CAMERA,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.RECORD_AUDIO
    ),
    1
)

2.2 新建FaceDetectionActivity

新建FaceDetectionActivity,并將其設(shè)為默認(rèn)的Activity,然后修改其XML布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:background="@color/black"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <SurfaceView
            android:id="@+id/surfaceView"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintDimensionRatio="w,4:3"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="wrap_content">
        <Button

            android:text="切換攝像頭"
            android:onClick="switchCamera"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</RelativeLayout>

2.3 添加JNI方法

然后修改FaceDetectionActivity為如下代碼,這里增加了三個(gè)JNI方法

  • init : 初始化OpenCV人臉識(shí)別
  • setSurface : 設(shè)置SurfaceView
  • postData : 發(fā)送視頻幀數(shù)據(jù)
class FaceDetectionActivity : AppCompatActivity() {
    private lateinit var binding: ActivityFaceDetectionBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityFaceDetectionBinding.inflate(layoutInflater)
        setContentView(binding.root)
		
		//這里省略了申請(qǐng)權(quán)限的代碼...
    }

	//初始化OpenCV
    external fun init(path: String?)

	//向OpenCV發(fā)送一幀的圖像數(shù)據(jù)
    external fun postData(data: ByteArray?, width: Int, height: Int, cameraId: Int)

	//設(shè)置SurfaceView
    external fun setSurface(surface: Surface?)

    companion object {
        init {
            System.loadLibrary("myopencvtest")
        }
    }
}

同時(shí),需要在native-lib.cpp中添加這三個(gè)JNI方法,這里的com_heiko_myopencvtest_FaceDetectionActivity需要改為你實(shí)際的包名和類名。

extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_init(JNIEnv *env, jobject thiz, jstring path) {

}
extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_postData(JNIEnv *env, jobject thiz,
                                                           jbyteArray data, jint width, jint height,
                                                           jint camera_id) {
}
extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_setSurface(JNIEnv *env, jobject thiz,
                                                             jobject surface) {
}

2.4 實(shí)現(xiàn)相機(jī)預(yù)覽功能

這里用到了Camera1 API,直接使用CameraHelper這個(gè)工具類接入即可,這部分詳見我的另一篇博客 Android 使用Camera1的工具類CameraHelper快速實(shí)現(xiàn)相機(jī)預(yù)覽、拍照功能

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityFaceDetectionBinding.inflate(layoutInflater)
	setContentView(binding.root)
	
	//這里省略了申請(qǐng)權(quán)限的代碼...
	
	val surfaceView = findViewById<SurfaceView>(R.id.surfaceView)
	surfaceView.holder.addCallback(this)
	cameraHelper = CameraHelper(cameraId)
	cameraHelper.setPreviewCallback(this)
}

3. 初始化OpenCV

3.1 配置OpenCV

接著,我們不要忘了配置OpenCV,這部分詳見我的另一篇博客 : Android Studio 接入OpenCV最簡(jiǎn)單的例子 : 實(shí)現(xiàn)灰度圖效果

3.2 賦值級(jí)聯(lián)分類器文件

配置好OpenCV,我們要將模型,也就是人臉識(shí)別的級(jí)聯(lián)分類器文件haarcascade_frontalface_alt.xml復(fù)制到asserts文件夾下。

當(dāng)我們啟動(dòng)App的時(shí)候,需要將該文件復(fù)制到外置存儲(chǔ)中。

 override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)
	//省略了其他代碼...
	
	//Utils類可以在本文末尾復(fù)制
	Utils.copyAssets(this@FaceDetectionActivity, "haarcascade_frontalface_alt.xml")
}

拷貝完成后,調(diào)用init()方法,傳入路徑

override fun onResume() {
        super.onResume()
		//省略了其他代碼...

		//Utils類可以在本文末尾復(fù)制
        val path = Utils.getModelFile(
            this@FaceDetectionActivity,
            "haarcascade_frontalface_alt.xml"
        ).absolutePath
        
        init(path)
    }

4. 實(shí)現(xiàn)CascadeDetectorAdapter

這里我們需要將我的另一篇博客中的 在Visual Studio上,使用OpenCV實(shí)現(xiàn)人臉識(shí)別 (下面統(tǒng)稱為VS實(shí)現(xiàn)) 中的代碼移植過來。

這里創(chuàng)建了CascadeDetectorAdapter,實(shí)現(xiàn)了DetectionBasedTracker::IDetector接口,和VS實(shí)現(xiàn)上代碼是一樣的。

class CascadeDetectorAdapter : public DetectionBasedTracker::IDetector
{
public:
    CascadeDetectorAdapter(cv::Ptr<cv::CascadeClassifier> detector) :
            IDetector(),
            Detector(detector)
    {
        CV_Assert(detector);
    }

    void detect(const cv::Mat& Image, std::vector<cv::Rect>& objects)
    {
        Detector->detectMultiScale(Image, objects, scaleFactor, minNeighbours, 0, minObjSize, maxObjSize);
    }

    virtual ~CascadeDetectorAdapter()
    {
    }

private:
    CascadeDetectorAdapter();
    cv::Ptr<cv::CascadeClassifier> Detector;
};

cv::Ptr<DetectionBasedTracker> tracker;

5. 實(shí)現(xiàn)init方法

init方法也是一樣的,聲明tracker對(duì)象,并調(diào)用run()方法,會(huì)啟動(dòng)一個(gè)異步線程,后面的人臉檢測(cè)會(huì)在這個(gè)異步線程進(jìn)行檢測(cè)了。(這個(gè)是保障實(shí)時(shí)人臉檢測(cè)不卡的前提)

//cv::Ptr<DetectionBasedTracker> tracker;
DetectionBasedTracker *tracker = 0;

extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_init(JNIEnv *env, jobject thiz, jstring path) {
    string stdFileName = env->GetStringUTFChars(path, 0);
    //創(chuàng)建一個(gè)主檢測(cè)適配器
    cv::Ptr<CascadeDetectorAdapter> mainDetector = makePtr<CascadeDetectorAdapter>(
            makePtr<CascadeClassifier>(stdFileName));
    //創(chuàng)建一個(gè)跟蹤檢測(cè)適配器
    cv::Ptr<CascadeDetectorAdapter> trackingDetector = makePtr<CascadeDetectorAdapter>(
            makePtr<CascadeClassifier>(stdFileName));
    //創(chuàng)建跟蹤器
    DetectionBasedTracker::Parameters DetectorParams;
    //tracker = makePtr<DetectionBasedTracker>(mainDetector, trackingDetector, DetectorParams);
    tracker= new DetectionBasedTracker(mainDetector, trackingDetector, DetectorParams);
    tracker->run();
}

5. 設(shè)置Surface

Android NDK 中,ANativeWindow 是一個(gè)C/C++接口,它提供了一種在 CC++ 代碼中訪問 Android Surface 的方式。通過使用ANativeWindow接口,開發(fā)者可以在NDK中直接訪問和操作Android窗口系統(tǒng),實(shí)現(xiàn)圖形處理和渲染操作。
這里我們將SurfaceView傳到JNI中,方便C/C++代碼后邊將圖像實(shí)時(shí)渲染到Android SurfaceView上。

#include <android/native_window_jni.h>

ANativeWindow *window = 0;

extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_setSurface(JNIEnv *env, jobject thiz,
                                                             jobject surface) {
    if (window) {
        ANativeWindow_release(window);
        window = 0;
    }
    window = ANativeWindow_fromSurface(env, surface);
}

6. 處理數(shù)據(jù)并實(shí)現(xiàn)人臉識(shí)別

處理圖像數(shù)據(jù)的部分我們?cè)?code>postData中實(shí)現(xiàn),這部分會(huì)先對(duì)圖像進(jìn)行處理,然后進(jìn)行人臉識(shí)別,并渲染到SurfaceView上。

extern "C"
JNIEXPORT void JNICALL
Java_com_heiko_myopencvtest_FaceDetectionActivity_postData(JNIEnv *env, jobject instance, jbyteArray data_,
                                                                                                    jint w, jint h, jint cameraId) {
    //待實(shí)現(xiàn)的代碼
}

6.1 將圖片轉(zhuǎn)化為Mat

參數(shù)中的jbyteArray data_,是從Android Java層中獲取到的。
然后轉(zhuǎn)化為jbyte *data這個(gè)字節(jié)數(shù)組,接著將其轉(zhuǎn)為一個(gè)Mat矩陣。
Mat是是OpenCV最基本的數(shù)據(jù)結(jié)構(gòu)。它用于存儲(chǔ)圖像數(shù)據(jù)。
需要注意的是,由于傳入的數(shù)據(jù)是YUV420,每個(gè)像素占1.5byte,
所以這個(gè)圖像的寬度需要傳入實(shí)際寬度*1.5,寬度不變。
這里的CV_8UC1是單通道的意思,就是說無論是Y分量還是U、V分量,都存儲(chǔ)在同一個(gè)通道里。

jbyte *data = env->GetByteArrayElements(data_, NULL);
Mat src(h + h / 2, w, CV_8UC1, data);

要獲取Mat對(duì)象中每個(gè)通道的數(shù)據(jù),可以使用OpenCV提供的函數(shù)和方法。
對(duì)于一個(gè)BGR圖像(即具有三個(gè)通道的圖像),每個(gè)通道的數(shù)據(jù)可以分別獲取并進(jìn)行處理。
以下是一些示例代碼,演示如何獲取每個(gè)通道的數(shù)據(jù):

// 假設(shè)img是包含BGR圖像的Mat對(duì)象    
// 獲取B通道數(shù)據(jù)   
Mat bChannel = img.channel(0);   
// 獲取G通道數(shù)據(jù)   
Mat gChannel = img.channel(1);   
//獲取R通道數(shù)據(jù)   
Mat rChannel = img.channel(2); 

6.2 將YUV轉(zhuǎn)為RGBA

接著,需要將YUV格式轉(zhuǎn)化為RGBA格式,方便后續(xù)的操作。
這里的COLOR_YUV2RGBA_NV21表示原始是NV21YUV格式,將其轉(zhuǎn)為RGBA格式。

cvtColor(src, src, COLOR_YUV2RGBA_NV21);

6.3 對(duì)圖像做翻轉(zhuǎn)和鏡像

由于手機(jī)攝像頭硬件安裝在手機(jī)里時(shí),和屏幕的方向并不是一致的,所以需要將攝像頭拍攝的畫面進(jìn)行旋轉(zhuǎn)。

  • 如果是前置攝像頭 : 需要將畫面逆時(shí)針旋轉(zhuǎn)90度,并做左右鏡像操作
  • 如果是后置攝像頭 : 需要將畫面順時(shí)針旋轉(zhuǎn)90度
if (cameraId == 1) {
    //前置攝像頭
    rotate(src, src, ROTATE_90_COUNTERCLOCKWISE);
    //1:左右鏡像
    //0:上下鏡像
    flip(src, src, 1);
}    else {
    //順時(shí)針旋轉(zhuǎn)90度
    rotate(src, src, ROTATE_90_CLOCKWISE);
}

6.4 轉(zhuǎn)為灰度圖并進(jìn)行直方圖均衡化處理

接著需要對(duì)圖像進(jìn)行灰度和直方圖均衡化處理,以便提高人臉識(shí)別的準(zhǔn)確性和可靠性,這部分和VS實(shí)現(xiàn)上是一樣。

Mat gray;
//轉(zhuǎn)為灰度圖
cvtColor(src, gray, COLOR_RGBA2GRAY);
//直方圖均衡化
equalizeHist(gray, gray);

6.5 進(jìn)行人臉檢測(cè)

接著就可以調(diào)用tracker->process來建人臉檢測(cè)了。
檢測(cè)完成后,接著調(diào)用tracker->getObjects將檢測(cè)的人臉位置賦值給faces。

std::vector<Rect> faces;
tracker->process(gray);
tracker->getObjects(faces);

6.6 將人臉用紅框框出來

接著,將識(shí)別到的人臉,用紅色的矩形框繪制出來,rectangle方法就是用來繪制一個(gè)矩形框的方法。

for (Rect face : faces) {
    rectangle(src, face, Scalar(255, 0, 0));
}

6.7 將圖像渲染到SurfaceView上

6.7.1 設(shè)置窗口緩沖區(qū)

ANativeWindow_setBuffersGeometry是設(shè)置Android Native窗口的緩沖區(qū)的大小和像素格式。

if (window) {
    ANativeWindow_setBuffersGeometry(window, src.cols, src.rows, WINDOW_FORMAT_RGBA_8888);
	
	//后續(xù)代碼在這里編寫...
}
6.7.2 將圖像數(shù)據(jù)填充到窗口的緩沖區(qū)

這里是個(gè)while循環(huán),會(huì)不斷地將圖像數(shù)據(jù)(RGBA),填充到窗口的緩沖區(qū),最后調(diào)用ANativeWindow_unlockAndPost提交刷新,圖像就渲染到SurfaceView上了。

ANativeWindow_Buffer window_buffer;
do {
    //如果 lock 失敗,直接 break
    if (ANativeWindow_lock(window, &window_buffer, 0)) {
        ANativeWindow_release(window);
        window = 0;
        break;
    }
    //將window_buffer.bits轉(zhuǎn)化為 uint8_t *
    uint8_t *dst_data = static_cast<uint8_t *>(window_buffer.bits);
    //stride : 一行多少個(gè)數(shù)據(jù) (RGBA) * 4
    int dst_linesize = window_buffer.stride * 4;

    //一行一行拷貝
    for (int i = 0; i < window_buffer.height; ++i) {
        memcpy(dst_data + i * dst_linesize, src.data + i * src.cols * 4, dst_linesize);
    }
    //提交刷新
    ANativeWindow_unlockAndPost(window);
} while (0);

6.8 回收資源

最后,別忘了回收資源

src.release();
gray.release();
env->ReleaseByteArrayElements(data_, data, 0);

7. 運(yùn)行項(xiàng)目

我們可以看到效果如下,至此我們就完成在Android上,使用OpenCV實(shí)現(xiàn)實(shí)時(shí)的人臉識(shí)別了。

Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上,音視頻開發(fā),android,opencv,人工智能,圖像識(shí)別,人臉識(shí)別

8. 本文源碼下載

Android和Windows下,使用OpenCV實(shí)現(xiàn)人臉識(shí)別 示例 Demo

9. OpenCV系列文章

Visual Studio 2022 cmake配置opencv開發(fā)環(huán)境_opencv visualstudio配置_氦客的博客-CSDN博客
在Visual Studio上,使用OpenCV實(shí)現(xiàn)人臉識(shí)別_氦客的博客-CSDN博客
Android Studio 接入OpenCV,并實(shí)現(xiàn)灰度圖效果_氦客的博客-CSDN博客
Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上_氦客的博客-CSDN博客

?? 如果覺得這篇博文寫的不錯(cuò),對(duì)你有所幫助,幫忙點(diǎn)個(gè)贊??
? 這是對(duì)我持續(xù)輸出高質(zhì)量博文的最好鼓勵(lì)。??文章來源地址http://www.zghlxwxcb.cn/news/detail-692211.html

到了這里,關(guān)于Android 使用OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別,并繪制到SurfaceView上的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java使用opencv實(shí)現(xiàn)人臉識(shí)別、人臉比對(duì)

    Java使用opencv實(shí)現(xiàn)人臉識(shí)別、人臉比對(duì)

    1. opencv概述 OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫(kù),它提供了一系列豐富的圖像處理和計(jì)算機(jī)視覺算法,包括圖像讀取、顯示、濾波、特征檢測(cè)、目標(biāo)跟蹤等功能。 opencv官網(wǎng):https://opencv.org/ opencv官網(wǎng)文檔:https://docs.opencv.org/4.7.0/index.html 參考教程1:https://www.w3cschool.cn/opencv/ 參考教

    2024年02月08日
    瀏覽(20)
  • 使用Python和OpenCV實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)并保存截圖

    在本篇博客中,我們將使用Python和OpenCV庫(kù)實(shí)現(xiàn)一個(gè)實(shí)時(shí)人臉檢測(cè)的小項(xiàng)目。我們將利用OpenCV中的Haar級(jí)聯(lián)分類器來檢測(cè)攝像頭捕獲的圖像中的人臉。 通過攝像頭實(shí)時(shí)捕獲視頻流。 使用Haar級(jí)聯(lián)分類器檢測(cè)視頻幀中的人臉。 在檢測(cè)到的人臉周圍繪制矩形框。 實(shí)時(shí)顯示檢測(cè)結(jié)果。

    2024年02月11日
    瀏覽(18)
  • Android:繪制自定義View人臉識(shí)別框

    Android:繪制自定義View人臉識(shí)別框

    項(xiàng)目開發(fā)需要自定義View實(shí)現(xiàn)一個(gè)人臉框,代碼實(shí)現(xiàn)很平常,一些細(xì)節(jié)記錄一下,方便以后查閱。 代碼實(shí)現(xiàn): FaceView.java 注意: 這里我把FaceView的layout_width、layout_height都設(shè)置成了\\\"match_parent\\\" 這里面有個(gè) 坑 容易踩到 本次開發(fā)時(shí),xml中FaceView控件往上一直到第一層父布局寬、高

    2024年02月09日
    瀏覽(21)
  • 使用opencv實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別

    使用opencv實(shí)現(xiàn)簡(jiǎn)單的人臉識(shí)別

    opencv-python是一個(gè)python綁定庫(kù),旨在解決計(jì)算機(jī)視覺問題。使用opencv模塊,可以實(shí)現(xiàn)一些對(duì)圖片和視頻的操作。 安裝opencv之前需要先安裝numpy,?matplotlib。然后使用pip安裝opencv庫(kù)即可。 使用import cv2進(jìn)行導(dǎo)入即可,需要注意的是cv2讀取圖片的顏色通道是BGR(藍(lán)綠紅)。 使用cv2.

    2023年04月19日
    瀏覽(21)
  • Qt開發(fā)_調(diào)用OpenCV(4.x)完成人臉檢測(cè)并繪制馬賽克(攝像頭實(shí)時(shí)數(shù)據(jù))

    這個(gè)基于Qt和OpenCV的人臉檢測(cè)和人臉打碼項(xiàng)目是通過實(shí)時(shí)視頻流中的人臉識(shí)別來保護(hù)隱私。 該項(xiàng)目目的是保護(hù)隱私并確保人臉數(shù)據(jù)安全。在某些情況下,使用實(shí)時(shí)視頻流進(jìn)行人臉檢測(cè)和識(shí)別可能涉及對(duì)個(gè)人隱私的侵犯。通過在圖像中打碼人臉區(qū)域,可以避免未經(jīng)許可的人臉出

    2024年02月06日
    瀏覽(24)
  • 在Visual Studio上,使用OpenCV實(shí)現(xiàn)人臉識(shí)別

    在Visual Studio上,使用OpenCV實(shí)現(xiàn)人臉識(shí)別

    本文介紹了如何在 Visual Studio 上,使用 OpenCV 來實(shí)現(xiàn)人臉識(shí)別的功能 環(huán)境說明 : 操作系統(tǒng) : windows 10 64位 Visual Studio 版本 : Visual Studio Community 2022 (社區(qū)版) OpenCV 版本 : OpenCV-4.8.0 (2023年7月最新版) 實(shí)現(xiàn)效果如圖所示,識(shí)別到的人臉會(huì)用紅框框出來 : 這部分詳見我的另一篇博客 :

    2024年02月12日
    瀏覽(41)
  • 使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測(cè)與人臉識(shí)別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,吐血整理......)

    使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測(cè)與人臉識(shí)別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,吐血整理......)

    要實(shí)現(xiàn)人臉識(shí)別功能,首先要進(jìn)行人臉檢測(cè),判斷出圖片中人臉的位置,才能進(jìn)行下一步的操作。 參考鏈接: 1、OpenCV人臉檢測(cè) 2、【OpenCV-Python】32.OpenCV的人臉檢測(cè)和識(shí)別——人臉檢測(cè) 3、【youcans 的圖像處理學(xué)習(xí)課】23. 人臉檢測(cè):Haar 級(jí)聯(lián)檢測(cè)器 4、OpenCV實(shí)戰(zhàn)5:LBP級(jí)聯(lián)分類器

    2024年02月12日
    瀏覽(25)
  • 使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測(cè)與人臉識(shí)別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,模型下載......)

    使用OpenCV工具包成功實(shí)現(xiàn)人臉檢測(cè)與人臉識(shí)別,包括傳統(tǒng)視覺和深度學(xué)習(xí)方法(附完整代碼,模型下載......)

    要實(shí)現(xiàn)人臉識(shí)別功能,首先要進(jìn)行人臉檢測(cè),判斷出圖片中人臉的位置,才能進(jìn)行下一步的操作。 參考鏈接: 1、OpenCV人臉檢測(cè) 2、【OpenCV-Python】32.OpenCV的人臉檢測(cè)和識(shí)別——人臉檢測(cè) 3、【youcans 的圖像處理學(xué)習(xí)課】23. 人臉檢測(cè):Haar 級(jí)聯(lián)檢測(cè)器 4、OpenCV實(shí)戰(zhàn)5:LBP級(jí)聯(lián)分類器

    2024年02月08日
    瀏覽(29)
  • 基于OpenCV提供的人臉識(shí)別算法LBPH實(shí)現(xiàn)人臉識(shí)別

    基于OpenCV提供的人臉識(shí)別算法LBPH實(shí)現(xiàn)人臉識(shí)別

    本文通過學(xué)習(xí)LBPH人臉識(shí)別算法,簡(jiǎn)要了解人臉識(shí)別技術(shù)的原理,實(shí)現(xiàn)人臉采集、訓(xùn)練人臉模型實(shí)現(xiàn)人臉識(shí)別。 OpenCV庫(kù)自帶的人臉級(jí)聯(lián)分級(jí)器具有很好的人臉檢測(cè)和人臉追蹤效果,它是一個(gè)基于Haar特征的Adaboost級(jí)聯(lián)分類器。特別注意,OpenCV庫(kù)雖然自帶人臉級(jí)聯(lián)分級(jí)器,但是識(shí)

    2024年02月03日
    瀏覽(21)
  • 【圖像處理】使用Python進(jìn)行實(shí)時(shí)人臉檢測(cè)和識(shí)別

    ????????你有沒有想過用Python構(gòu)建一個(gè)面部識(shí)別系統(tǒng)?不要再看了!在本教程中,我們將使用 face_recognition 庫(kù)來檢測(cè)和識(shí)別視頻流、圖像甚至使用網(wǎng)絡(luò)攝像頭實(shí)時(shí)檢測(cè)和識(shí)別人臉。 ????????人臉識(shí)別和人臉檢測(cè)是計(jì)算機(jī)視覺領(lǐng)域的兩個(gè)獨(dú)立任務(wù)。 ????????人臉檢測(cè)

    2024年02月13日
    瀏覽(97)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包