ラベル OpenCV の投稿を表示しています。 すべての投稿を表示
ラベル OpenCV の投稿を表示しています。 すべての投稿を表示

2019年8月12日月曜日

mkCascadeDetect.bat

call .\venv\Scripts\activate
python mkCascadeDetect.py
deactivate

cvtIcon.py

import cv2
import glob
import os
import os.path
import re
import numpy as np

ocvIcoDirPath="data/ico-96"
# def binary_threshold(path):def binary_threshold(img):
    # img = cv2.imread(path)    # grayed = cv2.cvtColor(img, cv2.IMREAD_GRAYSCALE)    grayed = img
    under_thresh = 105    upper_thresh = 145    maxValue = 255    th, drop_back = cv2.threshold(grayed, under_thresh, maxValue, cv2.THRESH_BINARY)
    th, clarify_born = cv2.threshold(grayed, upper_thresh, maxValue, cv2.THRESH_BINARY_INV)
    merged = np.minimum(drop_back, clarify_born)
    merged = drop_back
    return merged

def mask_blue(path):
    img = cv2.imread(path)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    blue_min = np.array([210*180/240, 170*100/240, 200*100/240], np.uint8)
    blue_max = np.array([230*180/240, 190*100/240, 230*100/240], np.uint8)

    blue_region = cv2.inRange(hsv, blue_min, blue_max)
    white = np.full(img.shape, 255, dtype=img.dtype)
    background = cv2.bitwise_and(white, white, mask=blue_region)  # detected blue area becomes white
    inv_mask = cv2.bitwise_not(blue_region)  # make mask for not-blue area    extracted = cv2.bitwise_and(img, img, mask=inv_mask)

    masked = cv2.add(extracted, background)

    return masked

def morph(img):
    kernel = np.ones((3, 3),np.uint8)
    opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=2)
    # opened = cv2.morphologyEx(img, cv2.MORPH_ERODE, kernel, iterations=2)    return opened

def morph_and_blur(img):
    kernel = np.ones((3, 3),np.uint8)
    m = cv2.GaussianBlur(img, (3, 3), 0)
    m = cv2.morphologyEx(m, cv2.MORPH_OPEN, kernel, iterations=2)
    m = cv2.GaussianBlur(m, (5, 5), 0)
    return m

def icoFile(icoFilePath):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)    # gray = cv2.cvtColor(img, cv2.IMREAD_COLOR)    # gray = mask_blue(gray)    gray = morph(gray)
    # gray = binary_threshold(icoFilePath)    # cv2.imwrite(detectedFilePath, gray)    return gray

def resize_image(img, size):
    # size is enough to img    img_size = img.shape[:2]
    if img_size[0] > size[1] or img_size[1] > size[0]:
        raise Exception("img is larger than size")

    # centering    row = (size[1] - img_size[0]) // 2    col = (size[0] - img_size[1]) // 2    resized = np.zeros(list(size) + [img.shape[2]], dtype=np.uint8)
    resized[row:(row + img.shape[0]), col:(col + img.shape[1])] = img

    # filling    mask = np.full(size, 255, dtype=np.uint8)
    mask[row:(row + img.shape[0]), col:(col + img.shape[1])] = 0    filled = cv2.inpaint(resized, mask, 3, cv2.INPAINT_TELEA)

    return filled

icoFilePaths = glob.glob(str(ocvIcoDirPath) + "/*")
pathname = ocvIcoDirPath + "-2"os.makedirs(pathname,  exist_ok=True)
for icoFilePath in icoFilePaths:
    basename = os.path.basename(icoFilePath)
    icoFilePath = re.sub('[/\\\\]', "/", icoFilePath)
    img = cv2.imread(icoFilePath)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = binary_threshold(gray)
    # gray = morph(gray)    # gray = morph_and_blur(gray)    # gray = resize_image(gray, (210, 210))    cv2.imwrite(pathname + "/" + basename, gray)
    gray = gray

2019年8月5日月曜日

getSitImg.py

import os
import re
import requests
import time
from bs4 import BeautifulSoup

staSitLst = {
    # jreast    #    # https://www.jreast.co.jp/estation/stations/    #     </td><td style="width:99px;"><A href="http://www.jreast.co.jp/estation/stations/1039.html" target = "_blank" onclick="openMap('1039');return false;">東京</A>    #    # https://www.jreast.co.jp/estation/stations/1039.html    #                  <img src="img/floormap/1039_1f.png" alt="東京駅 1F構内図">    #    # https://www.jreast.co.jp/estation/stations/img/floormap/1039_1f.png    "jreast": {
        "itemEnable": False,        "ocvSitUrl": "https://www.jreast.co.jp/",        "staLstUrl": "https://www.jreast.co.jp/estation/stations",        "reImgLstUrl": "^(http://www\.jreast\.co\.jp/estation/stations/[0-9]+\..+)$",        "reImgLstId": "\\1",        "fmtImgLstUrl": "{}",        "reStaImgUrl": "^(img/floormap/.+\..+)$",        "reStaImgId": "\\1",        "fmtStaImgUrl": "https://www.jreast.co.jp/estation/stations/{}",        "reStaImgUrlFilBas": "^.*img/floormap/([^.]+)\.[^.]+.*$",        "reStaImgUrlFilExt": "^.*img/floormap/[^.]+\.([^.]+)$",        "regStaImgUrlFilBas": "\\1",        "regStaImgUrlFilExt": "\\1",        "imgUrl": "{}/{}",        "z": "z"    },    # keikyu    #    # https://www.keikyu.co.jp/train-info/kakueki/index.html    #     <area coords="206,48,426,88" href="/train-info/kakueki/KK01.html" alt="品川" data-imagemap-rollover-url="/assets/image/train-info/kakueki/index_img_route_KK01.png">    #    # https://www.keikyu.co.jp/train-info/kakueki/KK01.html    #     <img src="/assets/image/train-info/kakueki/KK01/img_03.png" alt="品川駅の設備図です">    #    # https://www.keikyu.co.jp/assets/image/train-info/kakueki/KK01/img_03.png    "keikyu": {
        "itemEnable": False,        "ocvSitUrl": "https://www.keikyu.co.jp/",        "staLstUrl": "https://www.keikyu.co.jp/train-info/kakueki/index.html",        "reImgLstUrl": "^(/train-info/kakueki/KK[0-9][0-9]\.htm.*)",        "reImgLstId": "\\1",        "fmtImgLstUrl": "https://www.keikyu.co.jp{}",        "reStaImgUrl": "^(/assets/image/train-info/kakueki/KK[0-9][0-9]/img_03\..+)$",        "reStaImgId": "\\1",        "fmtStaImgUrl": "https://www.keikyu.co.jp{}",        "reStaImgUrlFilBas": "^.*/assets/image/train-info/kakueki/(KK[0-9][0-9])/img_03.[^.]+.*$",        "reStaImgUrlFilExt": "^.*/assets/image/train-info/kakueki/KK[0-9][0-9]/img_03.([^.]+).*$",        "regStaImgUrlFilBas": "\\1",        "regStaImgUrlFilExt": "\\1",        "imgUrl": "{}/{}",        "z": "z"    },    # tokyometro    #    # https://www.tokyometro.jp/station/index03.html    #                   <a href="./akihabara/index.html">    #    # https://www.tokyometro.jp/station/akihabara/yardmap/index.html#adjacent    #               <p class="v2_yardmapImg"><img src="../../yardmap_img/_station_%E7%A7%8B%E8%91%89%E5%8E%9F_yardmap_images_yardmap.jpg" alt="" class="v2_js-yardmapImg"></p>    #               <p class="v2_yardmapImg"><img src="../../yardmap_img/figure_yardmap_ayase.gif" alt="" class="v2_js-yardmapImg"></p>    #    # https://www.tokyometro.jp/station/yardmap_img/_station_%E7%A7%8B%E8%91%89%E5%8E%9F_yardmap_images_yardmap.jpg    # https://www.tokyometro.jp/station/yardmap_img/figure_yardmap_ayase.gif    "tokyometro": {
        "itemEnable": False,        "ocvSitUrl": "https://www.tokyometro.jp/",        "staLstUrl": "https://www.tokyometro.jp/station/index03.html",        "reImgLstUrl": "^\./(.+)/index\.html$",        "reImgLstId": "\\1",        "fmtImgLstUrl": "https://www.tokyometro.jp/station/{}/yardmap/index.html",        "reStaImgUrl": "^\.\./\.\./(yardmap_img/.+\..+)$",        "reStaImgId": "\\1",        "fmtStaImgUrl": "https://www.tokyometro.jp/station/{}",        "reStaImgUrlFilBas": "^.*https://www.tokyometro.jp/station/([^/]+)/yardmap/index.html.*$",        "reStaImgUrlFilExt": "^.*/yardmap_img/.+\.([^.]+).*$",        "regStaImgUrlFilBas": "\\1",        "regStaImgUrlFilExt": "\\1",        "imgUrl": "{}/{}",        "z": "z"    }

}

ocvItvlt = 10
def getStaImg(ocvSit, imgLstUrl, staImgUrl):
    reStaImgUrlFilBas = staSitLst[ocvSit]["reStaImgUrlFilBas"]
    regStaImgUrlFilBas = staSitLst[ocvSit]["regStaImgUrlFilBas"]
    reStaImgUrlFilExt = staSitLst[ocvSit]["reStaImgUrlFilExt"]
    regStaImgUrlFilExt = staSitLst[ocvSit]["regStaImgUrlFilExt"]
    imgFilBas = re.sub(reStaImgUrlFilBas, regStaImgUrlFilBas, imgLstUrl + "," + staImgUrl)
    imgFilExt = re.sub(reStaImgUrlFilExt, regStaImgUrlFilExt, imgLstUrl + "," + staImgUrl)
    fmtImgDirPth = "/".join(["data", "_img", "{}", "floormap"])
    fmtImgFilPth = "/".join([fmtImgDirPth, "{}.{}"])
    imgDirPth = fmtImgDirPth.format(ocvSit)
    imgFilPth = fmtImgFilPth.format(ocvSit, imgFilBas, imgFilExt)
    print("# staImgUrl=" + staImgUrl)
    print("# imgFilPth=" + imgFilPth)
    os.makedirs(imgDirPth, exist_ok=True)
    staImg = requests.get(staImgUrl)
    with open(imgFilPth, "wb") as file:
            file.write(staImg.content)
    time.sleep(ocvItvlt)

def getImgLst(ocvSit, imgLstUrl):
    reStaImgUrl = staSitLst[ocvSit]["reStaImgUrl"]
    reStaImgId = staSitLst[ocvSit]["reStaImgId"]
    fmtStaImgUrl = staSitLst[ocvSit]["fmtStaImgUrl"]
    staImgPag = requests.get(imgLstUrl)
    soup = BeautifulSoup(staImgPag.text, "lxml")
    staImgImgTags = soup.find_all("img", src=re.compile(reStaImgUrl))
    for staImgImgTag in staImgImgTags:
        staImgId = re.sub(reStaImgUrl, reStaImgId, staImgImgTag["src"])
        staImgUrl = fmtStaImgUrl.format(staImgId)
        print("# staImgId=" + staImgId + ", staImgUrl=" + staImgUrl)
        getStaImg(ocvSit, imgLstUrl, staImgUrl)

def getStaLst(ocvSit, staLstUrl):
    reImgLstUrl = staSitLst[ocvSit]["reImgLstUrl"]
    reImgLstId = staSitLst[ocvSit]["reImgLstId"]
    fmtImgLstUrl = staSitLst[ocvSit]["fmtImgLstUrl"]
    staLstPag = requests.get(staLstUrl)
    soup = BeautifulSoup(staLstPag.text, "lxml")
    staPagATags = soup.find_all("a", href=re.compile(reImgLstUrl))
    for staPagATag in staPagATags:
        staPagId = re.sub(reImgLstUrl, reImgLstId, staPagATag["href"])
        imgLstUrl = fmtImgLstUrl.format(staPagId)
        print("# staPagId=" + staPagId + ", imgLstUrl=" + imgLstUrl)
        getImgLst(ocvSit, imgLstUrl)

def getSitLst(staSitLst):
    for staSitNam in staSitLst.keys():
        if staSitLst[staSitNam]["itemEnable"] == True:
            staLstUrl = staSitLst[staSitNam]["staLstUrl"]
            print("# staSitNam=" + staSitNam + ", staLstUrl=" + staLstUrl)
            getStaLst(staSitNam, staLstUrl)

def getSit():
    getSitLst(staSitLst)

getSit()

2019年7月17日水曜日

mkCascadeDetect.py

import cv2
import glob
import os
import os.path
import re
import numpy as np

ocvIcoDirPath="data/ico"ocvMdlDirPath="data/mdl"ocvRstDirPath="result"ocvTgtDirPath="data/_img/tokyometro/floormap"# ocvTgtDirPath="data/pos/atm.jpg.d"# ocvTgtDirPath="data/pos/baby.jpg.d"# ocvTgtDirPath="data/pos/elv.jpg.d"# ocvTgtDirPath="data/pos/esc.jpg.d"# ocvTgtDirPath="data/pos/001275320-baby.jpg.d"
ocvTgtDirPaths = [
    "data/_img/jreast/floormap",    "data/_img/keikyu/floormap",    "data/_img/tokyometro/floormap",]

# def binary_threshold(img):#     # img = cv2.imread(path)#     grayed = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#     # grayed = img#     under_thresh = 105#     upper_thresh = 145#     maxValue = 255#     th, drop_back = cv2.threshold(grayed, under_thresh, maxValue, cv2.THRESH_BINARY)#     th, clarify_born = cv2.threshold(grayed, upper_thresh, maxValue, cv2.THRESH_BINARY_INV)#     merged = np.minimum(drop_back, clarify_born)#     return merged
# def mask_blue(img):#     # img = cv2.imread(path)#     hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)##     blue_min = np.array([210*180/240, 170*100/240, 200*100/240], np.uint8)#     blue_max = np.array([230*180/240, 190*100/240, 230*100/240], np.uint8)##     blue_region = cv2.inRange(hsv, blue_min, blue_max)#     white = np.full(img.shape, 255, dtype=img.dtype)#     background = cv2.bitwise_and(white, white, mask=blue_region)  # detected blue area becomes white##     inv_mask = cv2.bitwise_not(blue_region)  # make mask for not-blue area#     extracted = cv2.bitwise_and(img, img, mask=inv_mask)##     masked = cv2.add(extracted, background)##     return masked
# def morph(img):#     kernel = np.ones((3, 3),np.uint8)#     opened = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, iterations=2)#     return opened
def detectTgtIco(tgtFilePath, icoFilePath):
    if os.name == 'nt':
        os.system("title " + tgtFilePath + " " + icoFilePath)
    icoFileName = re.sub('^.*[/\\\\]', "", icoFilePath)
    tgtFileName = re.sub('^.*[/\\\\]', "", tgtFilePath)
    cascadeXml = str(ocvMdlDirPath) + '/' + icoFileName + '.d/cascade.xml'    detectedFilePath = ocvRstDirPath + "/" + str(tgtFileName) + "." + str(icoFileName) + "." + "jpg"    if os.path.isfile(cascadeXml):
        print("# " + detectedFilePath)
        Cascade = cv2.CascadeClassifier(cascadeXml)
        root, ext = os.path.splitext(tgtFilePath)
        if ext == "gif":
            return        else:
            img = cv2.imread(tgtFilePath, cv2.IMREAD_COLOR)
        # gray = img        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)        # gray = cv2.cvtColor(img, cv2.IMREAD_COLOR)        # gray = mask_blue(gray)        # gray = morph(gray)        # gray = binary_threshold(img)        # cv2.imwrite(detectedFilePath, gray)        point = Cascade.detectMultiScale(gray, 1.1, 3)
        if len(point) > 0:
            print("points: " + str(len(point)))
            for rect in point:
                print(rect)
                (x, y, w, h) = rect
                cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 5)
            cv2.imwrite(detectedFilePath, img)
        # else:        #     print("no detect")
# def icoFile(ocvTgtDirPath, icoFilePath):#     tgtFilePaths = glob.glob(str(ocvTgtDirPath) + "/*")#     for tgtFilePath in tgtFilePaths:#         tgtFilePath = re.sub('[/\\\\]', "/", tgtFilePath)#         tgtFileFile(tgtFilePath, icoFilePath)
# def icoFiles(ocvTgtDirPath):#     icoFilePaths = glob.glob(str(ocvIcoDirPath) + "/*")#     for icoFilePath in icoFilePaths:#         ocvTgtDirPaths.append(icoFilePath)#         icoFilePath = re.sub('[/\\\\]', "/", icoFilePath)#         icoFile(ocvTgtDirPath, icoFilePath)
# def icoFilePaths(ocvTgtFilePath, ocvIcoFilePath):#     icoFilePaths = glob.glob(str(ocvIcoDirPath) + "/*")#     for icoFilePath in icoFilePaths:#         detectTgtIco(tgtFilePath, icoFilePath)
def tgtFilePath(ocvTgtFilePath):
    ocvIcoFilePaths = glob.glob(str(ocvIcoDirPath) + "/*")
    for ocvIcoFilePath in ocvIcoFilePaths:
        detectTgtIco(ocvTgtFilePath, ocvIcoFilePath)

    # for ocvTgtDirPath in tgtFilePaths:    #     icoFiles(ocvTgtFilePath)

# def tgtFilePath(ocvTgtFilePath):#     for ocvTgtDirPath in tgtFilePaths:#         icoFiles(ocvTgtDirPath)
# for tgtFilePath in ocvTgtDirPaths:#     tgtFilePath = re.sub('[/\\\\]', "/", tgtFilePath)#     icoDir(tgtFilePath)

def tgtDirPath(ocvTgtDirPath):
    ocvTgtFilePaths = glob.glob(str(ocvTgtDirPath) + "/*")
    for ocvTgtFilePath in ocvTgtFilePaths:
            tgtFilePath(ocvTgtFilePath)

def tgtDirPaths(ocvTgtDirPaths):
    for ocvTgtDirPath in ocvTgtDirPaths:
        tgtDirPath(ocvTgtDirPath)

tgtDirPaths(ocvTgtDirPaths)

mkCascadeXml.cmd

@echo off
@rem Make cascade.xml
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
set "PATH=%PATH%;!cd!\opencv\build\x64\vc15\bin"

set "ocvThisName=%~nx0"
set "ocvSrcDirPath=src"
set "ocvIcoDirPath=data\ico"
set "ocvPosDirPath=data\pos"
set "ocvNegDirPath=data\neg"
set "ocvVecDirPath=data\pos"
set "ocvMdlDirPath=data\mdl"

set "ocvIcoHeight=20"
set "ocvIcoWidth=20"
set "ocvIcoBgColor=111"
set "ocvIcoBgThresh=1.0"
set "ocvMaxxangle=0.1"
set "ocvMaxyangle=0.0"
set "ocvMaxzangle=0.5"
set "ocvMinHitRate=0.97"
set "ocvMaxFalseAlarmRate=0.1"
set "ocvStage=3"

set "ocvIcoHeight=20"
set "ocvIcoWidth=20"
set "ocvIcoBgColor=111"
set "ocvIcoBgThresh=1.0"
set "ocvMaxxangle=0.1"
set "ocvMaxyangle=0.1"
set "ocvMaxzangle=0.1"
set "ocvMinHitRate=0.97"
set "ocvMaxFalseAlarmRate=0.1"
set "ocvStage=8"

set "ocvParams="
set "ocvParams=!ocvParams!;ocvIcoHeight=!ocvIcoHeight!"
set "ocvParams=!ocvParams!;ocvIcoWidth=!ocvIcoWidth!"
set "ocvParams=!ocvParams!;ocvIcoBgColor=!ocvIcoBgColor!"
set "ocvParams=!ocvParams!;ocvIcoBgThresh=!ocvIcoBgThresh!"
set "ocvParams=!ocvParams!;ocvMaxxangle=!ocvMaxxangle!"
set "ocvParams=!ocvParams!;ocvMaxyangle=!ocvMaxyangle!"
set "ocvParams=!ocvParams!;ocvMaxzangle=!ocvMaxzangle!"
set "ocvParams=!ocvParams!;ocvMinHitRate=!ocvMinHitRate!"
set "ocvParams=!ocvParams!;ocvMaxFalseAlarmRate=!ocvMaxFalseAlarmRate!"
set "ocvParams=!ocvParams!;ocvStage=!ocvStage!"
set "ocvParams=!ocvParams:~1!"

set /a ocvIcoImgNum=0
for %%z in (
  "!ocvIcoDirPath!\*"
) do (
  set /a "ocvIcoImgNum=!ocvIcoImgNum!+1"
  echo.>nul
)

set /a ocvNegImgNum=0
for %%z in (
  "!ocvNegDirPath!\*"
) do (
  set /a "ocvNegImgNum=!ocvNegImgNum!+1"
  echo.>nul
)

call :L_rmNegativeDat

@rem
call :L_mkNegativeDat

set /a ocvIcoImgCnt=0
for %%z in (
  "!ocvIcoDirPath!\*"
) do (
  set /a "ocvIcoImgCnt=!ocvIcoImgCnt!+1"
  set "ocvIcoFileName=%%~nxz"
  set "ocvIcoNameDirName=!ocvIcoFileName!.d"
  set "ocvPosDatFleName=!ocvIcoFileName!.positive.dat"
  set "ocvVecFleName=!ocvIcoFileName!.positive.vec"
  echo # !date! !time! %0 !ocvIcoFileName! **************************************** 1>&2
  title コマンドプロンプト - !ocvThisName! ico=!ocvIcoImgCnt!/!ocvIcoImgNum! stgN=!ocvStage! ^
    negN=!ocvNegImgNum! !ocvIcoFileName!

  call :L_rmPositiveDat
  call :L_rmPositiveVec
  call :L_rmModelXml

  @rem
  call :L_mkPositiveDat

  set /a ocvPosImgCnt=0
  for %%z in (
    "!ocvPosDirPath!\!ocvIcoNameDirName!\*"
  ) do (
    set /a "ocvPosImgCnt=!ocvPosImgCnt!+1"
    echo.>nul
  )

  echo # !date! !time! ocvPosImgCnt=!ocvPosImgCnt! ocvNegImgNum=!ocvNegImgNum!
  if 1 equ 1 (

    @rem
    call :L_mkPositiveVec
    title コマンドプロンプト - !ocvThisName! ico=!ocvIcoImgCnt!/!ocvIcoImgNum! stgN=!ocvStage! ^
      negN=!ocvNegImgNum! !ocvIcoFileName! posN=!ocvPosImgCnt!

    @rem
    call :L_mkModelXml

    echo.>nul
  )

  echo.>nul
)

call :L_mkCascadeDetect

title コマンドプロンプト

goto :eof


:L_mkNegativeDat
(
  echo.
  echo # !date! !time! %0 ========================================
) 1>&2
:echo cd=!cd!
set "ocvWorkDir=."
set ocv
if not exist "!ocvSrcDirPath!" mkdir "!ocvSrcDirPath!"
(
  for %%z in (
    "!ocvNegDirPath!\*"
  ) do (
    set "ovcNegFilePath=%%~z"
    set "ovcNegFilePath=!ovcNegFilePath:\=/!"
    echo ../!ovcNegFilePath!
    echo.>nul
  )
  echo.>nul
) > "!ocvSrcDirPath!/negative.dat"
type "!ocvSrcDirPath!\negative.dat" | sort > "!ocvSrcDirPath!/negative.dat2"
type "!ocvSrcDirPath!\negative.dat2" > "!ocvSrcDirPath!/negative.dat"
if exist "!ocvSrcDirPath!/negative.dat2" del /f /q "!ocvSrcDirPath!\negative.dat2"
set "ocvWorkDir="
goto :eof


:L_rmNegativeDat
(
  echo.
  echo # !date! !time! %0 ========================================
) 1>&2
:echo cd=!cd!
set "ocvWorkDir=."
if exist "!ocvSrcDirPath!/negative.dat" del /f /q "!ocvSrcDirPath!\negative.dat"
goto :eof


:L_mkPositiveDat
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
if not exist "!ocvPosDirPath!/!ocvIcoNameDirName!" mkdir "!ocvPosDirPath!/!ocvIcoNameDirName!"
pushd "!ocvPosDirPath!/!ocvIcoNameDirName!"
:echo cd=!cd!
set "ocvWorkDir=../../.."
set ocv
echo # !date! !time! ^
  opencv_createsamples.exe ^
    -info "!ocvPosDatFleName!" ^
    -img "!ocvWorkDir!/!ocvIcoDirPath:\=/!/!ocvIcoFileName!" ^
    -bg "!ocvWorkDir!/!ocvSrcDirPath:\=/!/negative.dat" ^
    -num !ocvNegImgNum! -maxxangle !ocvMaxxangle! -maxyangle !ocvMaxyangle! -maxzangle !ocvMaxzangle! ^
    -bgcolor !ocvIcoBgColor! -bgthresh !ocvIcoBgThresh! -w !ocvIcoWidth! -h !ocvIcoHeight!
opencv_createsamples.exe ^
    -info "!ocvPosDatFleName!" ^
    -img "!ocvWorkDir!/!ocvIcoDirPath:\=/!/!ocvIcoFileName!" ^
    -bg "!ocvWorkDir!/!ocvSrcDirPath:\=/!/negative.dat" ^
    -num !ocvNegImgNum! -maxxangle !ocvMaxxangle! -maxyangle !ocvMaxyangle! -maxzangle !ocvMaxzangle! ^
    -bgcolor !ocvIcoBgColor! -bgthresh !ocvIcoBgThresh! -w !ocvIcoWidth! -h !ocvIcoHeight!
echo # !date! !time! %0 errorlevel=!errorlevel! 1>&2
(
  for /f "usebackq tokens=*" %%y in (
    `type "!ocvPosDatFleName!"`
  ) do (
    echo !ocvIcoNameDirName!/%%y
    echo.>nul
  )
  echo.>nul
) > "../!ocvPosDatFleName!"
if exist "!ocvPosDatFleName!" del /f /q "!ocvPosDatFleName!"
popd
:echo cd=!cd!
set "ocvWorkDir="
goto :eof


:L_rmPositiveDat
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
:echo cd=!cd!
@rem if exist "!ocvPosDirPath!/!ocvIcoNameDirName!" rmdir /s /q "!ocvPosDirPath!/!ocvIcoNameDirName!"
if exist "!ocvPosDirPath!/!ocvPosDatFleName!" del /f /q "!ocvPosDirPath!\!ocvPosDatFleName!"
goto :eof


:L_mkPositiveVec
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
if not exist "!ocvVecDirPath!/!ocvIcoNameDirName!" mkdir "!ocvVecDirPath!/!ocvIcoNameDirName!"
pushd "!ocvPosDirPath!"
echo cd=!cd!
set "ocvWorkDir=../.."
:set "ocvWorkDir=.."
set ocv
echo # !date! !time! ^
  opencv_createsamples.exe ^
    -info "!ocvPosDatFleName!" ^
    -vec "!ocvVecFleName!" ^
    -num !ocvPosImgCnt! -w !ocvIcoWidth! -h !ocvIcoHeight!
opencv_createsamples.exe ^
    -info "!ocvPosDatFleName!" ^
    -vec "!ocvVecFleName!" ^
    -num !ocvPosImgCnt! -w !ocvIcoWidth! -h !ocvIcoHeight!
echo # !date! !time! %0 errorlevel=!errorlevel! 1>&2
popd
:echo cd=!cd!
set "ocvWorkDir="
goto :eof


:L_rmPositiveVec
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
:echo cd=!cd!
if exist "!ocvVecDirPath!/!ocvVecFleName!" del /f /q "!ocvVecDirPath!\!ocvVecFleName!"
goto :eof


:L_mkModelXml
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
if not exist "!ocvMdlDirPath!/!ocvIcoNameDirName!" mkdir "!ocvMdlDirPath!/!ocvIcoNameDirName!"
pushd "data"
:echo cd=!cd!
set "ocvWorkDir=.."
set /a ocvPosImgCnt8=!ocvPosImgCnt!*80/100
set ocv
echo # !date! !time! ^
  opencv_traincascade.exe ^
    -data "!ocvWorkDir!/!ocvMdlDirPath:\=/!/!ocvIcoNameDirName!" ^
    -vec "!ocvWorkDir!/!ocvVecDirPath:\=/!/!ocvVecFleName!" ^
    -bg "!ocvWorkDir!/!ocvSrcDirPath:\=/!/negative.dat" ^
    -numPos !ocvPosImgCnt8! -numNeg !ocvNegImgNum! -featureType LBP ^
    -maxFalseAlarmRate !ocvMaxFalseAlarmRate! -minHitRate !ocvMinHitRate! ^
    -w !ocvIcoWidth! -h !ocvIcoHeight! -numStages !ocvStage!
start /b /high /wait ^
  opencv_traincascade.exe ^
    -data "!ocvWorkDir!/!ocvMdlDirPath:\=/!/!ocvIcoNameDirName!" ^
    -vec "!ocvWorkDir!/!ocvVecDirPath:\=/!/!ocvVecFleName!" ^
    -bg "!ocvWorkDir!/!ocvSrcDirPath:\=/!/negative.dat" ^
    -numPos !ocvPosImgCnt8! -numNeg !ocvNegImgNum! -featureType LBP ^
    -maxFalseAlarmRate !ocvMaxFalseAlarmRate! -minHitRate !ocvMinHitRate! ^
    -w !ocvIcoWidth! -h !ocvIcoHeight! -numStages !ocvStage!
echo # !date! !time! %0 errorlevel=!errorlevel! 1>&2
popd
:echo cd=!cd!
set "ocvWorkDir="
goto :eof


:L_rmModelXml
(
  echo.
  echo # !date! !time! %0 !ocvIcoFileName! ========================================
) 1>&2
:echo cd=!cd!
@rem if exist "!ocvMdlDirPath!/!ocvIcoNameDirName!" rmdir /s /q "!ocvMdlDirPath!/!ocvIcoNameDirName!"
goto :eof

:L_mkCascadeDetect
title コマンドプロンプト - !ocvThisName! mkCascadeDetect.py
call .\venv\Scripts\activate
@rem python mkCascadeDetect.py
deactivate
goto :eof