tf-faster-rcnn 처리에 대한 몇 가지 작은 코드
# coding:utf-8
import os
import os.path
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
from w3lib.html import remove_tags
findpath ='/media/ymw/LANKEXIN/02facexml'
filenames=os.listdir(findpath)
s=[]
save_path ='/media/ymw/LANKEXIN/02facexml'
for file in filenames:
tree = ET.parse(os.path.join(findpath, file))
root = tree.getroot()
# 01face (1).jpg 000001.jpg
nodename = root[1].text
re_nodename = nodename[:-4].replace('02face (', '').replace(')', '')
new_num = int(re_nodename) + 1696
new_nodename = str(new_num)
new_nodename1 = new_nodename.zfill(6) + '.jpg'
# new_nodename1 = re_nodename.zfill(6) + '.jpg'
root[1].text = new_nodename1
tree.write(os.path.join(save_path, file))
2. 자신의 데이터 세트 마크업 형식을pascal voc의 마크업 형식으로 전환: 코드 이름: newxml.py
# coding:utf-8
import os
import os.path
import xml.etree.ElementTree as ET
from xml.etree.ElementTree import Element
findpath = '/media/ymw/LANKEXIN/02facexml'
filenames = os.listdir(findpath)
s = []
xml_path = '/media/ymw/LANKEXIN/02facexml'
for file in filenames:
# ( pascal voc )
tree = ET.parse(os.path.join(findpath, file))
root = tree.getroot()
source = Element('source')
root.append(source)
database = Element('database')
database.text = 'The VOC2007 Database'
source.append(database)
annotation = Element('annotation')
annotation.text = 'PASCAL VOC2007'
source.append(annotation)
image = Element('image')
image.text = 'flickr'
source.append(image)
# bndbox
object = root.getchildren()[3]
face = object.getchildren()[0]
big = face.getchildren()[1]
# ... object
one = Element('name')
one.text = 'cat'
object.append(one)
two = Element('pose')
two.text = 'Unspecified'
object.append(two)
three = Element('truncated')
three.text = '0'
object.append(three)
four = Element('difficult')
four.text = '0'
object.append(four)
object.append(big)
object.remove(face)
# bndbox = ET.SubElement(face, 'bndbox')
# bndbox.text = big.text
nodename2 = root[3].tag
root[3].tag = 'object'
root[3][4].tag = 'bndbox'
#
tree.write(os.path.join(xml_path, file))
3. Annotations 폴더에서 ImageSets를 생성하고, xml 파일에서 txt 파일을 생성합니다. 코드 이름: xml2txt.py
# coding:utf-8
import os
import random
trainval_percent = 0.98 # trainval_percent , ,
train_percent = 0.98 # ,
xmlfilepath = '/home/ymw/ /xinan/Cat Face/catxml_total'
txtsavepath = '/home/ymw/ /xinan/Cat Face/cattxt_total/'
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)
ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')
for i in list:
org_name=total_xml[i][:-4]+'
'
re_name=org_name.replace('01face (', '').replace(')', '')
name=re_name.zfill(7)
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
4. 시각화된 데이터 세트 검사 오류: 코드 이름:view.py
# -*- coding: UTF-8 -*-
from xml.etree import ElementTree as ET
import cv2
import os
imgpath = '/home/ymw/PycharmProjects/tf-faster-rcnn-master/data/VOCdevkit2007/VOC2007/JPEGImages'
xmlpath = '/home/ymw/ /facebig_xml'
imgnames = os.listdir(imgpath)
for imgname in imgnames:
img = cv2.imread(os.path.join(imgpath, imgname))
index = imgname[:-4]
xmlname = index + '.xml'
tree = ET.parse(os.path.join(xmlpath, xmlname))
root = tree.getroot()
bndbox = root.getchildren()[3].getchildren()[4]
big_xmin = int(bndbox.getchildren()[0].text)
big_ymin = int(bndbox.getchildren()[1].text)
big_xmax = int(bndbox.getchildren()[2].text)
big_ymax = int(bndbox.getchildren()[3].text)
cv2.rectangle(img, (big_xmin, big_ymin), (big_xmax, big_ymax), (0, 0, 255), 2)
cv2.imwrite(os.path.join('/home/ymw/PycharmProjects/tf-faster-rcnn-master/data/VOCdevkit2007/VOC2007/viewimgs',imgname), img)
5. 자신의 마크업에 좌표값이 0인지 확인(tf-faster-rcnn에 영향을 미쳐 프로그램 오류 발생: total loss = Nan):
#coding:utf-8
from xml.etree import ElementTree as ET
import os
import shutil,re
xmlpath = '/media/ymw/LANKEXIN/facebig_xml_right'
xmlnames = os.listdir(xmlpath)
i = 0
a = []
# f = open('/home/ymw/ /1.txt', 'w')
for xmlname in xmlnames:
# f.writelines(xmlname + '
')
tree = ET.parse(os.path.join(xmlpath, xmlname))
root = tree.getroot()
small = root.getchildren()[3].getchildren()[0].getchildren()[0]
big = root.getchildren()[3].getchildren()[4]
# object = tree.findall('object')
big_xmin = int(big.getchildren()[0].text)
big_ymin = int(big.getchildren()[1].text)
big_xmax = int(big.getchildren()[2].text)
big_ymax = int(big.getchildren()[3].text)
small_xmin = int(small.getchildren()[0].text)
small_ymin = int(small.getchildren()[1].text)
small_xmax = int(small.getchildren()[2].text)
small_ymax = int(small.getchildren()[3].text)
if big_xmin > small_xmin:
i = i+1
# newpath = '/media/ymw/LANKEXIN/02facexml/02face_cuowu'
# os.remove(os.path.join(xmlpath, xmlname))
# xmlnum = xmlname[:-4].replace('02face (', '').replace(')', '')
#
#
print(i)
print(xmlname)
이 단락 프로그램은 자신의 데이터 집중 좌표 값이 0인 그림 이름을 선별합니다. i는 개수를 표시하고 xmlname은 바로 선별할 파일 이름입니다.6. 테스트 세트 이미지 시각화 처리: 테스트 머신 이미지copy를 데이터/demo 폴더에 원래의 테스트 이미지를 교체하고 모든 테스트 세트 이미지 이름을 목록에 출력하여 테스트 세트 이미지의 시각화를 완성한다.코드 이름:copytestimg.py
import os
import shutil
# img_txtpath voc ImageSets text.txt,
img_txtpath ='tf-faster-rcnn-master/data/VOCdevkit2007/VOC2007/ImageSets/Main/test.txt'
# dir .jpg
dir = 'tf-faster-rcnn-master/data/VOCdevkit2007/VOC2007/JPEGImages'
# newpath copy
newpath = '/home/ymw/ /demo_test'
with open(img_txtpath) as f:
img_index = [x.strip()+'.jpg' for x in f.readlines()] # pascal_voc.py
# +'.jpg' , demo.py
# print(img_index)
for file in img_index:
img_path = os.path.join(dir, file)
shutil.copy(img_path, newpath) # copy
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.