LABLEME UPDATE DAMOD

Labelme的改進——海量圖片的自動標注

????深度學習一般需要對大量的圖片進行標注,但是手動標注耗時耗力,所以模仿labelme軟件的功能,使用程序對大批量的圖片進行自動標注,大大減少手動操作。下面介紹如何實現對大批量的圖片進行標注。
自動標注的程序實現:https://github.com/shuyucool/Labelme.git
一:Labelme的安裝參考——https://github.com/wkentaro/labelme.git
???這里簡要介紹windows下如何安裝:

?

1) 打開Anaconda命令行工具
2) conda create --name=labelme python=3.5 #我使用的版本是Python3.5,根據自己的情況修改版本號
3) activate labelme
4) conda install pyyaml
5) pip install labelme
6) labelme
???安裝中可能會出現這樣的錯誤:

?

from PyQt5 import QtCore?
ImportError: DLL load failed: 找不到指定的模塊。
?出現這樣錯誤的原因是:

??????Anaconda 安裝的Python缺少了python3.dll,可以通過去python.org 下載所需版本的python安裝包并安裝,然后從安裝目錄中拷貝python3.dll文件,粘貼到Anaconda安裝目錄下,也就是python36.dll所在的目錄下,一般就是第一層目錄,具體要看自己的安裝情況。

詳細解決方案參照——https://blog.csdn.net/ltime/article/details/71403947

?

二:了解Labelme生成的json文件的內部數據,批量生成標注圖像
{
? "imageData": "xxxxxx", # 原圖像數據通過b64編碼生成的字符串數據,這里不重要,只需要知道是圖像數據的另一種存儲形式
? "shapes": [ # 所有對象的形狀,鼠標點擊的輪廓坐標點,填充顏色等
? ? { # 第一個對象
? ? ? "points": [ # 邊緣是由點構成,實際上就是物體的輪廓坐標
? ? ? ? [
? ? ? ? ? 165.90909090909093, # 第一個點 x 坐標
? ? ? ? ? 36.909090909090935 ?# 第一個點 y 坐標
? ? ? ? ],
? ? ? ? ……
? ? ? ? [
? ? ? ? ? 240.90909090909093,
? ? ? ? ? 15.909090909090935
? ? ? ? ],
? ? ? ? [
? ? ? ? ? 216.90909090909093, # 最后一個點的x坐標
? ? ? ? ? 31.909090909090935 # 最后一個點的y坐標
? ? ? ? ]
? ? ? ],
? ? ? "fill_color": null, #填充顏色
? ? ? "label": "cat_1", ?# 第一個對象的標簽
? ? ? "line_color": null
? ? },
? ? { ?# 第二個對象
? ? ? "points": [
? ? ? ? [
? ? ? ? ? 280.90909090909093,
? ? ? ? ? 31.909090909090935
? ? ? ? ],
? ? ? ? ……
? ? ? ? [
? ? ? ? ? 362.90909090909093,
? ? ? ? ? 20.909090909090935
? ? ? ? ],
? ? ? ? [
? ? ? ? ? 339.90909090909093,
? ? ? ? ? 32.909090909090935
? ? ? ? ]
? ? ? ],
? ? ? "fill_color": null,
? ? ? "label": "cat_2", # 第二個對象的標簽
? ? ? "line_color": null
? ? }
? ],
? "fillColor": [
? ? 255,
? ? 0,
? ? 0,
? ? 128
? ],
? "imagePath": "/home/wu/1.jpg", # 原始圖片的路徑
? "lineColor": [
? ? 0,
? ? 255,
? ? 0,
? ? 128
? ]
}
?

詳細信息可以參考——https://blog.csdn.net/wc781708249/article/details/79595174

?

參考labelme軟件標記后生成的json文件海量圖片的自動標注可以分為以下四個步驟:

【1】提取圖片中物體輪廓的坐標

【2】將圖片編碼保存為json格式

【3】將【1】中的坐標數據與【2】的編碼后的圖片數據“融合”

【4】自動解析生成的json文件,并將16位的label.png轉為8位的圖片格式

?

三:提取物體輪廓坐標
?????圖片中物體輪廓的提取需要將原圖現轉化為二值圖,然后找到各個連通域的坐標,將所有圖片中不同的連通域對應的坐標保存為mat文件。示意圖如下:

?????輪廓坐標提取程序使用MATLAB編寫,為了方便大家閱讀,已經精簡了程序并加了注釋:(不明白輪廓提取得到的數據可以參考補充提供的示例數據,Z.mat數據中只有Z.btnimage類下是需要的數據,就是簡單的背景減除或者二值化處理)

%%MATLAB版本%%
load('D:\Zerbrafish Tracking\107-LXP7-6\107-LXP7-6_Z.mat');%加載指定的數據,因為我把二值化后的圖像都保存在了mat中
for i = 1:size(Z,2)
? ? Process_data= size(Z(i).imageCroped,2);
? ? if Process_data == 6 ?%當魚的數量等于6時,繼續執行
? ? ? ? I = Z(i).btnimage{1,1};%讀入圖像 ?這一步是關鍵,可以在此程序基礎上修改,加載轉換成二值化的圖片
? ? ? ? BW = im2bw(I, graythresh(I));%轉換成2進制圖像
? ? ? ? [B,L] = bwboundaries(BW,'noholes');%尋找邊緣,不包括孔
? ? ? ? mid_arug = cell(length(B),2);
? ? ?for k = 1:length(B)
? ? ? ? ?boundary = B{k}; %boundary表示所有的輪廓坐標,為了節省內存,我們取其1/4
? ? ? ? ?x_coordinate = ?boundary(1:4:end,2);
? ? ? ? ?y_coordinate = ?boundary(1:4:end,1);
? ? ? ? ?mid_arug{k,1} = {boundary(1:4:end,2)};
? ? ? ? ?mid_arug{k,2} = {boundary(1:4:end,1)};
? ? ?end
? ? ?assignin('base',['img_',num2str(i)],mid_arug);
? ? end
end
?

四:將圖片編碼后保存為json文件
?????這是為了最后生成的json文件和Labelme軟件生成的json文件相同的必須工作。同時為了批量能夠對圖像進行處理,編寫了一個轉換程序。批量轉換程序命名為:img2json.py。如果需要請點擊傳送門。(程序中已加入了詳細的中文注釋。)

?????以上面的圖片為例轉換成json文件后,其部分內容如下:(真正的圖片數據很大,為方便演示,只展示部分)

五:坐標數據與圖像數據的融合
?????坐標數據與圖像數據的融合,生成可供Labelme解析的json文件。融合程序命名為imitate_json.py。如果需要請點擊傳送門。(程序中已加入了詳細的中文注釋。)自動生成的json文件其實在內容上和“二”中介紹的json內部數據相同。

六:json文件的批量解析
?????如果一個一個的對“五”中生成的json文件解析,需要首先進入Labelme的安裝路徑,找到Scripts文件夾,進入后運行:

python labelme_json_to_dataset [文件名] #比如 python labelme_json_to_dataset D:\Practice\fusion_json\1.josn
?????但這樣每次只能解析一個文件,為了能夠批量解析,我寫了一個批量解析的程序,命名為release_json.py。如有需要請點擊傳送門。(程序中已加入了詳細的中文注釋。)解析后會在當前json文件路徑下生成一個對應的json文件夾。如下圖:

以“1_json”文件為例,其中包含了五個文件。如下圖:

?????其中的label.png是uint16格式存儲的圖像,需要將其轉成uint8格式存儲的才能讓opencv讀取。16位的label.png批量轉換成8位的程序命名為uint16_to_uint8.py。程序如下:(非常精簡)

#!/usr/bin/env python
# _*_ coding: UTF-8 _*_
# author:"Zhang Shuyu"
"""使用skimage模塊讀取圖片,不改變圖片數據類型uint16,保存為uint8類型"""
import os
import cv2
import natsort
import numpy as np
from skimage import io
from matplotlib import pylab as plt
input_file = "D:\\Practice\\fusion_json\\" ?#文件路徑
img_type = ".png"
?
for root, dirs, files in os.walk(input_file,topdown=True):
? ? for name in natsort.natsorted(dirs): ?#natsort,自然排序
? ? ? ? file_name = os.path.join(input_file + name,"label_1" + img_type)
? ? ? ? img = io.imread(file_name) ?#Todo:使用skimage模塊讀取圖片不會改變圖片的數據格式
? ? ? ? print(img.dtype)
? ? ? ? img = img.astype(np.uint8)
? ? ? ? print(img.dtype)
? ? ? ? cv2.imwrite(os.path.join(input_file + name,"label_1" + img_type),img)
?

?????其中的label.png轉成8位后看起來還是一片黑色,當其實已經對目標價上了標簽。以上圖中的label.png為例,轉換為8位后再對齊進行圖像增強,效果如下:

?

?

????其實就是對uint8類型格式的圖片數據讀取后乘以40。(uint8的取值范圍是0~255,在MATLAB顯示label.png圖片雖然看起來一片黑,但目標位置其實都加上了標簽1,2,3,4,5,6,以上圖為例,乘以40后,目標位置的像素相當于變成了40,80,120,160,200,240,所以顯示出的圖像就是目標顏色的深淺各不相同)

補充:
鑒于很多人詢問關于輪廓提取的數據問題,即加載的數據Z.mat是什么??我將自己的一個示例數據的鏈接提供給大家(Z.mat數據中只有Z.btnimage類下的數據是需要的數據)
https://pan.baidu.com/s/16-PH3zpS4yM_UA5t6iTFrw
?????這樣就能快速制作出大量的訓練數據集,對于幾千張圖片的標注大概只需要幾分鐘就能完成,如果手動標注的話一個人至少需要兩天。程序內容均為原創,使用請用麻煩點贊呀
————————————————
版權聲明:本文為CSDN博主「Kellybook」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_30622831/java/article/details/80100605

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251959.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251959.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251959.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎教程:面向對象編程[2]

Java基礎教程:面向對象編程[2] 內容大綱 訪問修飾符 四種訪問修飾符 Java中,可以使用訪問控制符來保護對類、變量、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限。 default (即缺省,什么也不寫): 在同一包內可見&#xff…

【javascript】異步編年史,從“純回調”到Promise

異步和分塊——程序的分塊執行 一開始學習javascript的時候, 我對異步的概念一臉懵逼, 因為當時百度了很多文章,但很多各種文章不負責任的把籠統的描述混雜在一起,讓我對這個 JS中的重要概念難以理解, “異步是非阻塞的…

Shell編程之if語法練習(LNMP)全過程

大家好,我是延凱,本人原來在CSDN寫作已經快一年了 都是相關Linux運維這方面的技術知識,現在搬到博客園也是我一直想的,本博客主要寫Python,docker,shell等偏向開發云計算等知識點,謝謝各位&…

基于UNet和camvid數據集的道路分割

基于UNet和camvid數據集的道路分割h(1.3.0): 背景 語義分割是深度學習中的一個非常重要的研究方向,并且UNet是語義分割中一個非常經典的模型。在本次博客中,我嘗試用UNet對camvid dataset數據集進行道路分割,大致期望的效果如下&…

二分法查找和普通查找

一、普通查找 對于數組和一個需要查找的元素來說,普通查找的原理很簡單,即為從數組的第一個元素到最后一個元素進行遍歷,如果第i個元素的值等于我們需要查找的值,那么返回找到的角標i,否則返回-1表示沒有查找到。這里以…

Linux下安裝zookeeper集群(奇數個)

1、 解壓zookeeper壓縮包 2、 data里創建“myid”文件(命令touch myid),內容是1(命令 echo 1 >> myid) 3、 zoo.cnf里配置dataDir、clientport、server.nIP:端口1(2881):端…

立體標定

立體標定應用標定數據轉換成深度圖標定 由于攝像頭目前是我們手動進行定位的,我們現在還不知道兩張圖像與世界坐標之間的耦合關系,所以下一步要進行的是標定,用來確定分別獲取兩個攝像頭的內部參數,并且根據兩個攝像頭在同一個世…

if _name_ == _main_

1.作用 py文件有2種使用方法,第1是自己本腳本自己獨立執行;第2是被import到其他文件腳本中執行. if _name_ " _main_" 該語句控制其他下一步的腳本是否執行。如果是自己本腳本獨立執行,那就運行該if條件下的腳本;如果…

LLVM完整參考安裝

文章目錄 一、直接下載編譯好的,見圖片命令二、下載源代碼自己編譯安裝 下面提供下載并mv完全的文件包三、安裝LLVM編譯器一、直接下載編譯好的,見圖片命令 這里使用llvm官網編譯好的包, 直接解壓即可用LLVM下載官網點擊這里下載llvm-6.0.1 下載完成后解壓tar -vxf clangllv…

微軟正式釋出基于 Chromium 的 Edge 預覽版本

百度智能云域名服務,.com新用戶首購僅需25元 微軟基于 Chromium 的全新版本 Edge 一直吸引著開發者與用戶的目光,當地時間 8 日,官方終于釋出了第一個 Dev 和 Canary 頻道構建版本。 Dev 與 Canary build 都是開發者預覽版,同屬…

下載和安裝R、RStudio !

現如今,R語言是統計領域廣泛使用的工具,是屬于GNU系統的一個自由、免費、源代碼開放的軟件,是用于統計計算和統計繪圖的優秀工具。而RStudio是R的集成開發環境,用它進行R編程的學習和實踐會更加輕松和方便。下面就教大家如何下載并…

豆瓣首頁話題輸入框的實現

在做問答的時候,遇到一個需求,用戶的問題需要限制字數,不僅顯示計算的超出字數,還需在超出的內容上加一些提醒的效果,例如豆瓣首頁的話題輸入框,抽時間研究了下,需要考慮下面幾個問題&#xff1…

pytorch 吸煙檢測yolov5s

YOLOV5s 吸煙目標檢測 參考學習 文章目錄 本原創項目長期更新,旨在完成校園異常行為實時精檢測,作到集成N次開發優化(不止局限于調包)為止,近期將不斷更新如下模型數據標注文件教程。關注博主,Star 一下g…

JQuery的ajax函數執行失敗,alert函數彈框一閃而過

先查看<form>標簽是否有action屬性&#xff0c;如果沒有&#xff0c;并且最后<button>標簽的type屬性為submit‘時&#xff0c;默認提交位置就是當前頁面 如果在頁面右鍵檢查&#xff0c;點擊網絡&#xff0c;會在開頭發現這樣的post包&#xff1a; 在右側消息頭處…

C#中Request.ServerVariables詳細說明及代理

Request.ServerVariables("Url") 返回服務器地址Request.ServerVariables("Path_Info") 客戶端提供的路徑信息Request.ServerVariables("Appl_Physical_Path") 與應用程序元數據庫路徑相應的物理路徑Request.ServerVariables("Path_Transla…

coco與voc相互轉化

把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和 把VOC格式標簽轉化為YOLO格式標簽 點亮&#xff5e;黑夜 2020-07-07 11:08:24 3537 已收藏 90 分類專欄&#xff1a; 19—目標檢測 文章標簽&#xff1a; voc yolo 版權 把LabelImg標注的YOLO格式標簽轉化為VOC格式標簽 和…

angular中封裝fancyBox(圖片預覽)

首先在官網下載最新版的fancyBox(一定要去最新網站&#xff0c;以前依賴的jquery版本偏低)&#xff0c;附上鏈接&#xff1a;http://fancyapps.com/fancybox/3/ 然后在項目中引用jquery&#xff0c;然后在引用jquery.fancybox.min.css和jquery.fancybox.min.js。 如果需要動畫和…

十二省聯考題解 - JLOI2019 題解

十二省聯考題解 - JLOI2019 題解 兩個T3的難度較大 平均代碼量遠大于去年省選 套路題考查居多 A 難度等級 1 $n^2$暴力可以拿到$60$分的優秀成績 然后可以想到把區間異或轉化為前綴兩點異或 可以想到使用二分答案的方法可持久化Trie解決&#xff0c;但是時間復雜度為$n\log^2 (…

前端vue的get和post請求

vue的get和post需要兩個文件vue.js和vue-resource.js 以下是實現的代碼&#xff0c;可以參考一下&#xff0c;需要注意的接口的請求需要考慮跨域的問題&#xff0c;其次就是訪問頁面需要在tomcat下訪問&#xff0c;否則也會報跨域的問題 <!DOCTYPE html> <html lang&q…

[Vijos 1143]三取方格數

Description 設有N*N的方格圖&#xff0c;我們將其中的某些方格填入正整數&#xff0c; 而其他的方格中放入0。 某人從圖得左上角出發&#xff0c;可以向下走&#xff0c;也可以向右走&#xff0c;直到到達右下角。 在走過的路上&#xff0c;他取走了方格中的數。&#xff08;取…