成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用 OpenCV 和 Python 構建自己的圖像分類標注工具

開發(fā)
在本教程中,你學習了如何為圖像分類任務創(chuàng)建一個簡單的標注工具。我們可以對這個工具進行很多改進。

每當應用機器學習來解決問題時,目標在某種程度上都是將模型擬合到某些數據上。為了使模型表現良好并泛化到未見過的數據,你需要確保使用高質量的數據集進行訓練。特別是在監(jiān)督學習環(huán)境中,你需要確保數據被準確標注。

無論你構建的模型有多大,投入了多少億個參數,或者對數據集進行了多少增強,低質量的輸入不會神奇地變成高質量的輸出。

根據你試圖解決的任務,并不總是有合適的公開數據集可用。在這種情況下,你可能需要構建自己的數據集。然而,最初你的數據很可能沒有被標注。讓我向你展示如何構建一個簡單、快速的標注工具,從未標注的數據集中分類你的圖像數據。

演示

圖像數據集

數據集中的樣本

為了演示這個標注工具,我將使用手機錄制的圖像數據集,目標是對三種不同的USB接口類型進行分類:USB-A、USB-C、Micro USB和Mini USB。最初,所有圖像都未標注,存放在輸入目錄中。我們的標注工具應該逐個展示圖像,并在指定類別后將其移動到相應的目錄。

標注工具在運行中

指南

1. 先決條件

如果你想跟著操作,你應該安裝opencv-python。你可以在項目倉庫的示例文件夾中找到一些示例圖像。

2. 數據加載

首先,我們從輸入文件夾中加載圖像。我們可以使用pathlib中的glob函數查找所有jpg圖像擴展名的文件。將結果傳遞給sorted函數,確保圖像按順序處理。

from pathlib import Path


input_path = Path("input")
input_img_paths = sorted(input_path.glob("*.jpg"))

我們還需要準備輸出目錄,確保它存在。

output_path = Path("output")
output_path.mkdir(parents=True, exist_ok=True)

我們可以遍歷圖像列表,并使用cv2.imread將圖像加載到數組中。然后顯示圖像并等待按鍵。通過在cv2.waitKey函數中將延遲設置為0,我們無限期地等待,直到按下某個鍵。然后確保按下Q可以退出應用程序,最后關閉所有opencv窗口。

import cv2


...


def annotate_images(
    input_img_paths: list[Path],
    output_path: Path,
)-> None:


    for img_path in input_img_paths:
        img = cv2.imread(str(img_path))


        cv2.imshow("Image", img)


        while True:
            key = cv2.waitKey(0)


            # Quit Annotation Tool
            if key == ord("q"):
                return


        cv2.destroyAllWindows()

注意:使用按位與(&)和0xFF,我們只查看按鍵的最后幾位。這確保即使NumLock被激活,數字仍然與ord函數的數字相同。

3. 標注

讓我們在字符串列表中定義任務的標簽。在我的例子中,我有四個不同接口的標簽:

...


def annotate_images(
    input_img_paths: list[Path],
    output_path: Path,
    labels: list[str],
) -> None:
    ...


annotate_images(
    input_img_paths=input_img_paths,
    output_path=output_path,
    labels=["usb_a", "usb_c", "usb_mini", "usb_micro"],
)

現在我們希望數字鍵0、1、2和3將圖像分類到相應的標簽文件夾中。waitKey函數中的key變量是一個整數,表示按下字符的Unicode代碼。要檢查按鍵是否是數字之一,我們需要使用ord函數將數字轉換為Unicode,類似于我們檢查按鍵q以關閉窗口的方式。該函數期望長度為1的字符串,因此我們需要在將索引傳遞給函數之前將其轉換為字符串。

...


  while True:


    ...


    for i in range(len(labels)):
        if key == ord(str(i)):
            label = labels[i]
            print(f"Classified as {label}")


            # TODO: move to correct label folder


            break

要將圖像移動到輸出路徑中的分類標簽文件夾,我們可以使用pathlib中的/操作來連接路徑,然后使用rename函數將文件移動到目標位置。

...


if key == ord(str(i)):
    label = labels[i]
    print(f"Classified as {label}")


    output_img_path = output_path / label / img_path.name
    img_path.rename(output_img_path)


    break

在我們這樣做之前,我們需要確保目標文件夾存在。所以在循環(huán)之前,我們遍歷所有標簽并創(chuàng)建相應的文件夾。

...


# create all classification folders
for label in labels:
    label_dir = output_path / label
    label_dir.mkdir(parents=True, exist_ok=True)


while True:
    ...

另一種更Pythonic的標簽鍵檢查方法是在循環(huán)之前創(chuàng)建鍵Unicode到標簽的映射。這樣,我們不需要在循環(huán)的每一步中遍歷所有鍵。

# mapping from key to label
labels_key_dict = {ord(str(i)): label for i, label in enumerate(labels)}


while True:
    ...


    if key in labels_key_dict:
        label = labels_key_dict[key]
        print(f"Classified as {label}")


        output_img_path = output_path / label / img_path.name
        img_path.rename(output_img_path)


        break

讓我們還為鍵到標簽的映射添加一個小幫助文本。

for i, label in enumerate(labels):
    cv2.putText(
        img,
        f"{i}: {label}",
        (10, 30 + 30 * i),
        cv2.FONT_HERSHEY_SIMPLEX,
        1,
        (255, 255, 255),
        2,
        cv2.LINE_AA,
    )

結論

在本教程中,你學習了如何為圖像分類任務創(chuàng)建一個簡單的標注工具。我們可以對這個工具進行很多改進。我想進一步探索的一件事是添加不僅分類圖像的功能,還可以分割圖像并創(chuàng)建分割掩碼。

當然,有很多更復雜的工具可以簡化你的標注過程。然而,有時一個非常簡單的工具就是你所需要的,特別是在項目的早期階段進行探索性數據分析時,你需要一個快速的概念驗證。

【參考資料】

  • 代碼鏈接:https://github.com/trflorian/annotation-tool?source=post_page-----c0549b644d15--------------------------------
  • 文章來源:https://towardsdatascience.com/build-your-own-annotation-tool-for-image-classification-in-5-minutes-c0549b644d15
責任編輯:趙寧寧 來源: 小白玩轉Python
相關推薦

2021-07-25 21:28:55

人臉識別人工智能工具

2020-04-09 14:23:44

PythonMarkdown編輯器

2024-03-27 14:32:47

圖像標注開源機器學習

2022-06-29 09:00:00

前端圖像分類模型SQL

2025-02-17 12:00:00

PythonOpenCV提取圖像

2018-04-23 13:10:01

2020-09-10 07:00:00

人工智能AI機器學習

2014-07-30 09:35:36

DockerPaaS

2023-07-30 17:34:53

KV存儲ChunkPosit

2020-03-06 20:50:30

FedoraLinuxNextcloud

2023-01-11 07:28:49

TensorFlow分類模型

2013-11-20 09:26:21

AngularJSJavaScript

2018-07-27 16:18:30

PythonTwitter機器人

2022-10-30 15:00:40

小樣本學習數據集機器學習

2017-09-25 15:43:24

圖像模板Python+Open

2024-09-29 10:34:31

FlaskPythonAPI

2024-11-20 16:12:31

Python圖像處理計算機視覺

2018-07-24 16:00:38

2018-07-24 16:05:58

2018-03-22 11:00:45

PythonRSS
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线电影观看 | 亚洲国产精品久久久久 | 精品一区在线免费观看 | 中文字幕在线看第二 | 成人高清在线视频 | 在线午夜 | 国产农村妇女毛片精品久久麻豆 | 久久国产精品一区二区三区 | 一区二区三区在线观看视频 | 日韩二区| 国产成人精品久久二区二区91 | 水蜜桃亚洲一二三四在线 | 色免费看 | 国产三区在线观看视频 | 伊人精品久久久久77777 | 91 在线 | 一区二区三区中文字幕 | 成人在线精品视频 | av第一页 | 欧美久久久久久 | 国产精品免费在线 | 久久久新视频 | 午夜一区二区三区在线观看 | 国产精品美女久久久久久免费 | 亚洲黄色片免费观看 | 在线中文字幕亚洲 | 啪啪毛片 | 一区二区三区高清 | 久久久久久久久久毛片 | 免费看的黄网站 | 一个色在线| 中文字幕一区在线观看视频 | 日韩午夜影院 | 国产精品国产三级国产aⅴ无密码 | 91久久综合亚洲鲁鲁五月天 | 国产精品久久国产精品99 gif | 欧美精品久久 | 99久久精品国产麻豆演员表 | 一级黄色日本片 | 久久久久国产精品 | 一区二区三区久久久 |