- ChangeImagesMaxSize
- ExtractImagesFromVideo
- CreateBoundingBoxes
- ExportToClassification
- ExportToCSV
- ExportToPascal (🔼 2019-03-14)
- Generate TFRecord - API Tensorflow (🔼 2019-03-19)
- Import from txt ground truth - format Wider Face (🔼 2019-03-14)
- Convert CityscapeMask annotatiton to XML Pascal.py (🔼 2019-06-10)
- mAP
@misc{marcelo_cabral_ghilardi_2019_2604909,
author = {Marcelo Cabral Ghilardi},
title = {kabrau/PyImageRoi: Tools to annotate images},
month = mar,
year = 2019,
doi = {10.5281/zenodo.2604909},
url = {https://doi.org/10.5281/zenodo.2604909}
}
A tool to change images max size into folder
usage: ChangeImagesMaxSize.py [-h] -p PATH -s MAXSIZE
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-s MAXSIZE, --maxSize MAXSIZE
resize image (width ou height) to MAX SIZE
A tool to extract images from videos
The images name is same video name with a sequential number, e.g.:
- video: VID-20170817-WA0003.mp4
- images: VID-20170817-WA0003-(F00001).txt, VID-20170817-WA0003-(F00002).txt, VID-20170817-WA0003-(F00003).txt
usage: ExtractImagesFromVideo.py [-h] -p VIDEOSPATH -o OUTPUTPATH [-f FPS]
[-n]
{portrait,landscape}
positional arguments:
{portrait,landscape} portrait (default) or landscape
optional arguments:
-h, --help show this help message and exit
-p VIDEOSPATH, --videosPath VIDEOSPATH
videos input path
-o OUTPUTPATH, --outputPath OUTPUTPATH
images output path
-f FPS, --fps FPS extract frames por seconds
-n, --new Extracts only from videos without extraction (new
video) Extracts only from videos without extraction (new videos) <br>
A tool to Labeling object bounding boxes or ROI (Region of interest) in images
(adjusts the displayed image size to the screen size)
- multiple boxes per image
- multiple classes per image
The regions are saved in a text file with same name of image file, e.g.
IMG-20170807-WA0001.jpg
IMG-20170807-WA0001.txt
locaisvstdss.jpg
locaisvstdss.txt
phpiqa6ae.752.502.s.jpg
phpiqa6ae.752.502.s.txt
** Important: ** Do not put two pictures with the same name and different extensions in the same folder.
Each line of text file is a one region
class_number x1 y1 width height image_width image_height
Example:
1 426 679 55 99 1080 1920
1 440 839 30 59 1080 1920
usage: CreateBoundingBoxes.py [-h] -p PATH [-f] [-c CLASS]
[-className [CLASSNAME [CLASSNAME ...]]]
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-f, --first starts on the first image (default: Jump to first
image without label)
-c CLASS, --class CLASS
class number started (default = 0)
-className [CLASSNAME [CLASSNAME ...]]
class name list (0..9 positions, max 10), e.g.
-className dog cat
Left Click mouse to start marking an area
Right Click mouse to remove last area
'0..9' change class to new boxe (aaccent key = 0, too)
'N' or 'space-bar' to next image
'P' to previus image
'Q' Exit
python CreateBoundingBoxes.py -p ...\image -className cat plant
0 227 111 662 359 1024 576
1 647 255 114 173 1024 576
1 756 257 115 172 1024 576
1 4 180 164 316 1024 576
A tool to extract box from images and save imagebox to classification. Save the separated images by classes, each class in a subfolder.
usage: ExportToClassification.py [-h] -p PATH -d DEST
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-d DEST, --dest DEST destination images path
python ExportToClassification.py -p ...\image -f ...\image
..\.\tmp\0 MyCat-0.jpg [227, 111, 889, 470, '0'] (359, 662, 3)
..\.\tmp\1 MyCat-1.jpg [647, 255, 761, 428, '1'] (173, 114, 3)
..\.\tmp\1 MyCat-2.jpg [756, 257, 871, 429, '1'] (172, 115, 3)
..\.\tmp\1 MyCat-3.jpg [4, 180, 168, 496, '1'] (316, 164, 3)
A tool to create a cvs file with de bounding boxes
note: Use 1 classname only
usage: ExportToCSV.py [-h] -p PATH -c CVS_FILE
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-c CVS_FILE, --cvs_file CVS_FILE
cvs file
python ExportToCSV.py -p E:\Datasets\pedestrian_signal\images\test -c E:\Datasets\pedestrian_signal\images\test.csv
filename,width,height,class,xmin,ymin,xmax,ymax
16431531.jpg,640,426,sinaleira,317,92,345,140
16431540.jpg,640,426,sinaleira,449,106,475,148
17074299.jpg,620,412,sinaleira,566,199,586,228
19156210.jpg,620,412,sinaleira,181,112,206,161
20170701_105311.jpg,768,1024,sinaleira,323,424,352,471
20170701_105442.jpg,768,1024,sinaleira,311,412,346,463
TOOL to Create a XML files (PASCAL FORMAT)
usage: ExportToPascal.py [-h] -p PATH -a ANNPATH
[-className [CLASSNAME [CLASSNAME ...]]]
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-a ANNPATH, --annpath ANNPATH
annotation path
-className [CLASSNAME [CLASSNAME ...]]
class name list (0..9 positions, max 10), e.g.
-className dog cat
python ExportToPascal.py -p "E:\Datasets\pedestrian_signal\images" -a "E:\Datasets\pedestrian_signal\images.ann_gostop" -className go stop off
Ps: At the end, it shows total images and classes
Specific converter for PedestrianLights dataset available at: https://www.uni-muenster.de/PRIA/en/forschung/index.shtml
TOOL to Create a XML files (PASCAL FORMAT)
usage: usage: ExportToPascal.5971774.py [-h] -p PATH -o GTFILE -a ANNPATH
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-o GTFILE, --gtfile GTFILE
original ground truth file
-a ANNPATH, --annpath ANNPATH
annotation path
python ExportToPascal.5971774.py -p "E:\Datasets\pedestrianlights-5971774\pedestrianlights\download\imagesequences\01" -o "E:\Datasets\pedestrianlights-5971774\pedestrianlights\download\imagesequences\01\groundtruth.txt" -a "E:\Datasets\pedestrianlights-5971774\pedestrianlights\download\imagesequences\01.ann.GoStop"
Ps: At the end, it shows total images and classes
- First, convert from PASCAL to CSV, use: ExportPascal2csv.py
- Second, generate TFRecord, use: Generate_TFRecord.py
usage: ExportPascal2csv.py [-h] -p PATH -o OUTPUT [-a]
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH annotations path
-o OUTPUT, --output OUTPUT
csv output file
-a, --addPathCol add path collumn
usage: Generate_TFRecord.py [-h] -c CSV_INPUT -o OUTPUT_PATH [-i IMAGES_PATH]
optional arguments:
-h, --help show this help message and exit
-c CSV_INPUT, --csv_input CSV_INPUT
Path to the CSV input
-o OUTPUT_PATH, --output_path OUTPUT_PATH
Path to output TFRecord
-i IMAGES_PATH, --images_path IMAGES_PATH
Path for Images, If dont have into CSV
python ExportPascal2csv.py -p E:\datasets\FaceDataset\Wider\WIDER_train\train.ann -o E:\datasets\FaceDataset\Wider\WIDER_train\train.csv -a
python Generate_TFRecord.py --csv_input=E:\datasets\FaceDataset\Wider\WIDER_train\train.csv --output_path=E:\datasets\FaceDataset\Wider\WIDER_train\train.record
Tool to calc mAP in Object Detection
Returns in the console the mAP values
And inside each method folder create a subfolder named _chart with a pdf of the Precision Recall method
You need a folder with Pascal VOC annotations, parameter --annpath
And a root folder with one ou more methods result folder, parameter --resultpath e.g:
c:\results <= root
c:\results\faster <= method result folder
c:\results\ssd <= method result folder
c:\results\yolo <= method result folder
Inside each method result folder, you need results files by classes
e.g:
cat.txt
dog.txt
mouse.txt
In the results files by class, the content is in this format:
filename confidence x1 y1 x2 y2
e.g:
file001 0.99862 441.5266 429.1418 504.2249 548.0778
file005 0.99757 466.8359 433.5500 531.3656 545.9105
file007 0.95728 495.3467 440.6576 554.5069 558.3262
usage: mAP.py [-h] -a ANNPATH -r RESULTPATH -c [CLASS [CLASS ...]] -i IOU [-v [VERBOSE]]
optional arguments:
-h, --help show this help message and exit
-a ANNPATH, --annpath ANNPATH
Pascal VOC annotation path
-r RESULTPATH, --resultpath RESULTPATH
Path of method results
-c [CLASS [CLASS ...]], --class [CLASS [CLASS ...]]
list of class, e.g. --classes dog cat mouse
-i IOU, --IOU IOU IOU confidence threshold, e.g. 0.5
-v [VERBOSE], --verbose [VERBOSE]
show verbose
python mAP.py -a E:\Datasets\signal\test.ann.GoStop -r E:\GitHub\PedestrialTrafficLight\accurace_calc\results\3C\ -c cat dog mouse -i 0.5
Wider Face - A Face Detection dataset to Benchmark https://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/index.html
File name
Number of bounding box
x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose
usage: ImportFromTxtGT_01.py [-h] -p PATH -f FILE
optional arguments:
-h, --help show this help message and exit
-p PATH, --path PATH images path
-f FILE, --file FILE ground truth file
python importFromTxtGT_01.py -p E:/datasets/FaceDataset/Wider/WIDER_train/images/ -f E:/datasets/FaceDataset/Wider/wider_face_split/wider_face_train_bbx_gt.txt
Convert CityscapeMask annotatiton to XML Pascal.py
Open code CityscapeMask2Pascal.py and set folders and classes
python CityscapeMask2Pascal.py