jackyu1127 5 years ago
parent
commit
27764bfed7
12 changed files with 12595 additions and 0 deletions
  1. +11
    -0
      hyperlpr_pip_pkg/.idea/hyperlpr_python_pkg.iml
  2. +7
    -0
      hyperlpr_pip_pkg/.idea/misc.xml
  3. +8
    -0
      hyperlpr_pip_pkg/.idea/modules.xml
  4. +533
    -0
      hyperlpr_pip_pkg/.idea/workspace.xml
  5. +4
    -0
      hyperlpr_pip_pkg/demo.py
  6. +19
    -0
      hyperlpr_pip_pkg/hyperlpr/LICENSE
  7. +8
    -0
      hyperlpr_pip_pkg/hyperlpr/__init__.py
  8. +317
    -0
      hyperlpr_pip_pkg/hyperlpr/hyperlpr.py
  9. +10408
    -0
      hyperlpr_pip_pkg/hyperlpr/models/cascade/char/char_single.xml
  10. +1242
    -0
      hyperlpr_pip_pkg/hyperlpr/models/cascade/detector/detector_ch.xml
  11. +5
    -0
      hyperlpr_pip_pkg/hyperlpr/table_chs.py
  12. +33
    -0
      hyperlpr_pip_pkg/setup.py

+ 11
- 0
hyperlpr_pip_pkg/.idea/hyperlpr_python_pkg.iml View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.6 (2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Unittests" />
</component>
</module>

+ 7
- 0
hyperlpr_pip_pkg/.idea/misc.xml View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (2)" project-jdk-type="Python SDK" />
</project>

+ 8
- 0
hyperlpr_pip_pkg/.idea/modules.xml View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/hyperlpr_python_pkg.iml" filepath="$PROJECT_DIR$/.idea/hyperlpr_python_pkg.iml" />
</modules>
</component>
</project>

+ 533
- 0
hyperlpr_pip_pkg/.idea/workspace.xml View File

@@ -0,0 +1,533 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="caeb919c-8c94-4131-ad3a-d33b9b1b99d7" name="Default" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="CoverageDataManager">
<SUITE FILE_PATH="coverage/hyperlpr_python_pkg$hyperlpr.coverage" NAME="hyperlpr Coverage Results" MODIFIED="1533847442467" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/hyperlpr" />
<SUITE FILE_PATH="coverage/hyperlpr_python_pkg$__init__.coverage" NAME="__init__ Coverage Results" MODIFIED="1533893800483" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/hyperlpr" />
<SUITE FILE_PATH="coverage/hyperlpr_python_pkg$demo.coverage" NAME="demo Coverage Results" MODIFIED="1575743192703" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="setup.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/setup.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324">
<caret line="25" column="20" selection-start-line="25" selection-start-column="20" selection-end-line="25" selection-end-column="20" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="adapters.py" pinned="false" current-in-tab="true">
<entry file="file://$USER_HOME$/anaconda3/lib/python3.6/site-packages/requests/adapters.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143">
<caret line="448" selection-start-line="448" selection-end-line="448" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="demo.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/demo.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="27" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
<folding>
<element signature="e#0#22#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="hyperlpr.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/hyperlpr/hyperlpr.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="568">
<caret line="304" column="38" selection-start-line="304" selection-start-column="38" selection-end-line="304" selection-end-column="38" />
<folding>
<element signature="e#14#24#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="__init__.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/hyperlpr/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="7" selection-start-line="7" selection-end-line="7" />
<folding>
<element signature="e#29#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="table_chs.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/hyperlpr/table_chs.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file leaf-file-name="refinenet.prototxt" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/hyperlpr/models/dnn/refinenet.prototxt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
</leaf>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>line_experiment</find>
<find>print</find>
<find>detectPlateRough</find>
<find>refine_net</find>
</findStrings>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/hyperlpr_python_packge/__init__.py" />
<option value="$PROJECT_DIR$/hyperlpr_python_packge/setup.py" />
<option value="$PROJECT_DIR$/hyperlpr_python_packge/LICENSE" />
<option value="$PROJECT_DIR$/hyperlpr/HyperLPRLite.py" />
<option value="$PROJECT_DIR$/hyperlpr/ch_chars_table.py" />
<option value="$PROJECT_DIR$/py-hyperlpr/__init__.py" />
<option value="$PROJECT_DIR$/py-hyperlpr/hyperlpr.py" />
<option value="$PROJECT_DIR$/dd/d.py" />
<option value="$PROJECT_DIR$/dd/__init__.py" />
<option value="$PROJECT_DIR$/keras-resnet/keras_resnet/__init__.py" />
<option value="$PROJECT_DIR$/build/lib/hyperlpr/__init__.py" />
<option value="$PROJECT_DIR$/setup.py" />
<option value="$PROJECT_DIR$/hyperlpr/table_chs.py" />
<option value="$PROJECT_DIR$/hyperlpr/__init__.py" />
<option value="$PROJECT_DIR$/hyperlpr/hyperlpr.py" />
<option value="$PROJECT_DIR$/demo.py" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodePackageJsonFileManager">
<packageJsonPaths />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="980" />
<option name="y" value="23" />
<option name="width" value="1822" />
<option name="height" value="1380" />
</component>
<component name="ProjectView">
<navigator proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="hyperlpr_python_pkg" type="b2602c69:ProjectViewProjectNode" />
<item name="hyperlpr_python_pkg" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="Scope" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="true" />
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/hyperlpr/models/dnn" />
<recent name="$PROJECT_DIR$" />
<recent name="$PROJECT_DIR$/hyperlpr/models/cascade/detector" />
<recent name="$PROJECT_DIR$/hyperlpr" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager" selected="Python.demo">
<configuration name="__init__" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="hyperlpr_python_pkg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/hyperlpr" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/hyperlpr/__init__.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<configuration name="demo" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="hyperlpr_python_pkg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/demo.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<configuration name="hyperlpr" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="hyperlpr_python_pkg" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/hyperlpr" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/hyperlpr/hyperlpr.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<list>
<item itemvalue="Python.hyperlpr" />
<item itemvalue="Python.__init__" />
<item itemvalue="Python.demo" />
</list>
<recent_temporary>
<list>
<item itemvalue="Python.demo" />
<item itemvalue="Python.__init__" />
<item itemvalue="Python.hyperlpr" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration>$USER_HOME$/.subversion</configuration>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="caeb919c-8c94-4131-ad3a-d33b9b1b99d7" name="Default" comment="" />
<created>1533557460138</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1533557460138</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="980" y="23" width="1822" height="1380" extended-state="0" />
<layout>
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
<window_info anchor="right" x="0" y="0" width="405" height="634" id="Documentation" side_tool="true" weight="0.32977527" />
<window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Run" order="2" weight="0.32735777" />
<window_info anchor="bottom" id="Version Control" order="7" show_stripe_button="false" />
<window_info anchor="bottom" id="Python Console" order="7" />
<window_info active="true" anchor="bottom" id="Terminal" order="7" visible="true" weight="0.64536244" />
<window_info anchor="right" id="Remote Host" order="3" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.18202247" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="right" id="Database" order="3" />
<window_info anchor="right" id="SciView" order="3" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="right" id="Commander" order="0" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Find" order="1" weight="0.32896462" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="1" />
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/models/__init__.py" />
<entry file="file://$PROJECT_DIR$/dd/d.py" />
<entry file="file://$PROJECT_DIR$/hyperlpr/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="1" selection-start-line="1" selection-end-line="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/table_chs.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/setup.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" selection-start-line="22" selection-end-line="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/LICENSE">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" selection-start-line="19" selection-end-line="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/hyperlpr.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1380">
<caret line="96" column="25" selection-start-line="96" selection-start-column="25" selection-end-line="96" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="1" selection-start-line="1" selection-end-line="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/table_chs.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/setup.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" selection-start-line="22" selection-end-line="22" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/LICENSE">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" selection-start-line="19" selection-end-line="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/hyperlpr.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1380">
<caret line="96" column="25" lean-forward="true" selection-start-line="96" selection-start-column="25" selection-end-line="96" selection-end-column="25" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/cascade/cascade12.xml" />
<entry file="file://$USER_HOME$/Library/Caches/PyCharm2018.1/python_stubs/2029340387/cv2/dnn.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="246">
<caret line="92" column="4" selection-start-line="92" selection-start-column="4" selection-end-line="92" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/cascade/detector/detector_ch.xml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/cascade/char/char_single.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="90">
<caret line="6" column="11" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="11" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/keras-resnet/docs/source/conf.py" />
<entry file="file://$PROJECT_DIR$/dd/d.py" />
<entry file="file://$PROJECT_DIR$/dd/__init__.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/metrics.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/layers/_upsample.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/layers/__init__.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/models/_time_distributed_2d.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/setup.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/__init__.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/layers/_batch_normalization.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/models/__init__.py" />
<entry file="file://$PROJECT_DIR$/keras-resnet/keras_resnet/models/_2d.py" />
<entry file="file://$PROJECT_DIR$/build/lib/hyperlpr/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="16" column="40" selection-start-line="16" selection-start-column="2" selection-end-line="16" selection-end-column="40" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build/lib/hyperlpr/hyperlpr.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/build/lib/hyperlpr/table_chs.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr.egg-info/dependency_links.txt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr.egg-info/PKG-INFO">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr.egg-info/requires.txt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr.egg-info/SOURCES.txt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr.egg-info/top_level.txt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/dnn/HorizonalFinemapping.prototxt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" column="13" selection-start-line="4" selection-start-column="11" selection-end-line="4" selection-end-column="13" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/LICENSE">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" selection-start-line="19" selection-end-line="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/build/lib/hyperlpr/models/cascade/detector/detector_ch.xml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/build/lib/hyperlpr/models/cascade/char/char_single.xml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/dnn/SegmenationFree-Inception.prototxt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15">
<caret line="3" column="14" selection-start-line="3" selection-start-column="11" selection-end-line="3" selection-end-column="14" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/dnn/det3.prototxt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/dnn/refinenet.prototxt">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/cascade/char/char_single.xml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/models/cascade/detector/detector_ch.xml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/table_chs.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="105">
<caret line="7" selection-start-line="7" selection-end-line="7" />
<folding>
<element signature="e#29#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/hyperlpr/hyperlpr.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="568">
<caret line="304" column="38" selection-start-line="304" selection-start-column="38" selection-end-line="304" selection-end-column="38" />
<folding>
<element signature="e#14#24#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/demo.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="30">
<caret line="2" column="27" selection-start-line="2" selection-start-column="27" selection-end-line="2" selection-end-column="27" />
<folding>
<element signature="e#0#22#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/setup.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="324">
<caret line="25" column="20" selection-start-line="25" selection-start-column="20" selection-end-line="25" selection-end-column="20" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/anaconda3/lib/python3.6/site-packages/requests/adapters.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="143">
<caret line="448" selection-start-line="448" selection-end-line="448" />
</state>
</provider>
</entry>
</component>
<component name="masterDetails">
<states>
<state key="ScopeChooserConfigurable.UI">
<settings>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.2" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
</states>
</component>
</project>

+ 4
- 0
hyperlpr_pip_pkg/demo.py View File

@@ -0,0 +1,4 @@
from hyperlpr import *
import cv2
image = cv2.imread("test.png")
print(HyperLPR_plate_recognition(image,16,charSelectionDeskew=False))

+ 19
- 0
hyperlpr_pip_pkg/hyperlpr/LICENSE View File

@@ -0,0 +1,19 @@
Copyright (c) 2018 The Python Packaging Authority

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

+ 8
- 0
hyperlpr_pip_pkg/hyperlpr/__init__.py View File

@@ -0,0 +1,8 @@
name = "hyperlpr_python_pkg"
import sys
from .hyperlpr import LPR
import os

PR = LPR(os.path.join(os.path.split(os.path.realpath(__file__))[0],"models"))
def HyperLPR_plate_recognition(Input_BGR,minSize=30,charSelectionDeskew=True , region = "CH"):
return PR.plate_recognition(Input_BGR,minSize,charSelectionDeskew)

+ 317
- 0
hyperlpr_pip_pkg/hyperlpr/hyperlpr.py View File

@@ -0,0 +1,317 @@
#coding=utf-8
import cv2
import numpy as np
import os
from .table_chs import chars




class LPR():
def __init__(self,folder):
"""
Init the recognition instance.

:param model_detection: opencv cascade model which detecting license plate.
:param model_finemapping: finemapping model which deskew the license plate
:param model_rec: CNN based sequence recognition model trained with CTC loss.
"""

charLocPath= os.path.join(folder,"cascade/char/char_single.xml")
detectorPath = os.path.join(folder,"cascade/detector/detector_ch.xml")
modelRecognitionPath = [os.path.join(folder,"dnn/SegmenationFree-Inception.prototxt"),os.path.join(folder,"dnn/SegmenationFree-Inception.caffemodel")]
modelFineMappingPath= [os.path.join(folder,"dnn/HorizonalFinemapping.prototxt"),os.path.join(folder,"dnn/HorizonalFinemapping.caffemodel")]
mini_ssd_path= [os.path.join(folder,"dnn/mininet_ssd_v1.prototxt"),os.path.join(folder,"dnn/mininet_ssd_v1.caffemodel")]
refine_net_path = [os.path.join(folder,"dnn/refinenet.prototxt"),os.path.join(folder,"dnn/refinenet.caffemodel")]

self.detector = cv2.CascadeClassifier(detectorPath)
self.charLoc = cv2.CascadeClassifier(charLocPath)
self.modelRecognition = cv2.dnn.readNetFromCaffe(*modelRecognitionPath)
self.ssd_detection = cv2.dnn.readNetFromCaffe(*mini_ssd_path)
self.refine_net = cv2.dnn.readNetFromCaffe(*refine_net_path)

def detect_ssd(self,im):
"""
Detect the approximate location of plate via single shot detector based on modified mobilenet.
:param im: input image (BGR) .
:return: [[cropped,x1,y2,x2,y2] ,... ]
"""
_im = im.copy()
pixel_means = [0.406, 0.456, 0.485]
pixel_stds = [0.225, 0.224, 0.229]
pixel_scale = 255.0
rows, cols, c = im.shape
im_tensor = np.zeros((1, 3, im.shape[0], im.shape[1]))
im = im.astype(np.float32)
for i in range(3):
im_tensor[0, i, :, :] = (im[:, :, 2 - i] / pixel_scale - pixel_means[2 - i]) / pixel_stds[2 - i]
self.ssd_detection.setInput(im_tensor)
print(im_tensor.shape)
cropped_images = []
cvOut = self.ssd_detection.forward()
for detection in cvOut[0, 0, :, :]:
score = float(detection[2])
if score > 0.5:
x1 = int(detection[3] * cols)
y1 = int(detection[4] * rows)
x2 = int(detection[5] * cols)
y2 = int(detection[6] * rows)
x1 = max(x1,0)
y1 = max(y1,0)
x2 = min(x2,im.shape[1]-1)
y2 = min(y2,im.shape[0]-1)
cropped = _im[y1:y2,x1:x2]
cropped_images.append([cropped ,[x1,y1,x2,y2]])
return cropped_images

def detect_traditional(self,image_gray,resize_h = 720,en_scale =1.1,minSize = 30):
"""
Detect the approximate location of plate via opencv build-in cascade detection.
:param image_gray: input single channel image (gray) .
:param resize_h: adjust input image size to a fixed size.
:param en_scale: the ratio of image between every scale of images in cascade detection.
:param minSize: minSize of plate increase this parameter can increase the speed of detection.
:return: the results.
"""
watches = self.detector.detectMultiScale(image_gray, en_scale, 3, minSize=(minSize*4, minSize))
cropped_images = []
for (x, y, w, h) in watches:
x -= w * 0.14
w += w * 0.28
y -= h * 0.15
h += h * 0.35
x1 = int(x)
y1 = int(y)
x2 = int(x+w)
y2 = int(y+h)
x1 = max(x1,0)
y1 = max(y1,0)
x2 = min(x2,image_gray.shape[1]-1)
y2 = min(y2,image_gray.shape[0]-1)
cropped = image_gray[y1:y2,x1:x2]
cropped_images.append([cropped ,[x1,y1,x2,y2]])
return cropped_images


def loose_crop(self,image, box, aspect_ratio, padding_ratio=1.7):
"""
Crop the image with an extend rectangle.
:param image: input image (BGR).
:param box: origin bounding box.
:param aspect_ratio: the aspect ratio that need to keep.
:param padding_ratio: padding ratio of origin rectangle.
:return: the cropped image
"""
x1, y1, x2, y2 = box
cx, cy = ((x2 + x1) // 2, (y2 + y1) // 2)
if (x2 - x1) / (y2 - y1) > aspect_ratio:
_w = int((x2 - x1) * padding_ratio)
_h = int(_w / aspect_ratio)
else:
_h = int((y2 - y1) * padding_ratio)
_w = int(_h * aspect_ratio)
x1, y1, x2, y2 = cx - _w // 2, cy - _h // 2, cx + _w // 2, cy + _h // 2
x1 = int(max(x1, 0))
y1 = int(max(y1, 0))
cropped = image[y1:y2, x1:x2]
return cropped


def decode_ctc(self,y_pred):
"""
Decode the results from the last layer of recognition model.
:param y_pred: the feature map output last feature map.
:return: decode results.
"""
results = ""
confidence = 0.0
y_pred = y_pred.T
table_pred = y_pred
res = table_pred.argmax(axis=1)
for i,one in enumerate(res):
if one<len(chars) and (i==0 or (one!=res[i-1])):
results+= chars[one]
confidence+=table_pred[i][one]
confidence/= len(results)
return results,confidence

def fit_ransac(self,pts, zero_add=0):
"""
fit a line and use RANSAC algorithm to reject outlier.
:param pts: input pts
:return: The line border around the image on the location of the point
"""
if len(pts) >= 2:
[vx, vy, x, y] = cv2.fitLine(pts, cv2.DIST_HUBER, 0, 0.01, 0.01)
lefty = int((-x * vy / vx) + y)
righty = int(((136 - x) * vy / vx) + y)
return lefty + 30 + zero_add, righty + 30 + zero_add
return 0, 0

def fine_mapping(self,image_rgb):
"""
fit plate upper and lower with multi-threshold method to segment single character.
:param image_rgb:
:return: fined image.
"""

line_upper = [];
line_lower = [];
line_experiment = []
if image_rgb.ndim == 3:
gray_image = cv2.cvtColor(image_rgb, cv2.COLOR_BGR2GRAY)
else:
gray_image = image_rgb

for k in np.linspace(-50, 0, 16):
binary_niblack = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 17,k)
if cv2.__version__[0] == "4":
contours, hierarchy = cv2.findContours(binary_niblack.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
else:
imagex, contours, hierarchy = cv2.findContours(binary_niblack.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
bdbox = cv2.boundingRect(contour)
if ((bdbox[3] / float(bdbox[2]) > 0.7 and bdbox[3] * bdbox[2] > 100 and bdbox[3] * bdbox[2] < 1200) or (
bdbox[3] / float(bdbox[2]) > 3 and bdbox[3] * bdbox[2] < 100)):
line_upper.append([bdbox[0], bdbox[1]])
line_lower.append([bdbox[0] + bdbox[2], bdbox[1] + bdbox[3]])
line_experiment.append([bdbox[0], bdbox[1]])
line_experiment.append([bdbox[0] + bdbox[2], bdbox[1] + bdbox[3]])
rgb = cv2.copyMakeBorder(image_rgb, 30, 30, 0, 0, cv2.BORDER_REPLICATE)
leftyA, rightyA = self.fit_ransac(np.array(line_lower), 3)
leftyB, rightyB = self.fit_ransac(np.array(line_upper), -3)
rows, cols = rgb.shape[:2]
pts_map1 = np.float32([[cols - 1, rightyA], [0, leftyA], [cols - 1, rightyB], [0, leftyB]])
pts_map2 = np.float32([[136, 36], [0, 36], [136, 0], [0, 0]])
mat = cv2.getPerspectiveTransform(pts_map1, pts_map2)
image = cv2.warpPerspective(rgb, mat, (136, 36), flags=cv2.INTER_CUBIC)
return image


def fine_mapping_by_selecting(self,image_rgb,line_upper,line_lower ):
"""
fit plate upper and lower with detecting character boundingbox
:param image_rgb: input image
:param line_upper: padding of upper
:param line_lower: padding of lower
:return: fined image.
"""


rgb = cv2.copyMakeBorder(image_rgb, 30, 30, 0, 0, cv2.BORDER_REPLICATE)
leftyA, rightyA = self.fit_ransac(np.array(line_lower), 3)
leftyB, rightyB = self.fit_ransac(np.array(line_upper), -3)
rows, cols = rgb.shape[:2]
pts_map1 = np.float32([[cols - 1, rightyA], [0, leftyA], [cols - 1, rightyB], [0, leftyB]])
pts_map2 = np.float32([[136, 36], [0, 36], [136, 0], [0, 0]])
mat = cv2.getPerspectiveTransform(pts_map1, pts_map2)
image = cv2.warpPerspective(rgb, mat, (136, 36), flags=cv2.INTER_CUBIC)
return image

def to_refine(self,image, pts, scale=3.0):
"""
refine the image by input points.
:param image_rgb: input image
:param pts: points
"""
x1, y1, x2, y2, x3, y3, x4, y4 = pts.ravel()
cx, cy = int(128 // 2), int(48 // 2)
cw = 64
ch = 24
tx1 = cx - cw // 2
ty1 = cy - ch // 2
tx2 = cx + cw // 2
ty2 = cy - ch // 2
tx3 = cx + cw // 2
ty3 = cy + ch // 2
tx4 = cx - cw // 2
ty4 = cy + ch // 2
target_pts = np.array([[tx1, ty1], [tx2, ty2], [tx3, ty3], [tx4, ty4]]).astype(np.float32) * scale
org_pts = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]]).astype(np.float32)
mat_ = cv2.estimateRigidTransform(org_pts, target_pts, True)
dsize = (int(120 * scale), int(48 * scale))
warped = cv2.warpAffine(image, mat_, dsize)
return warped

def affine_crop(self, image, pts):
"""
crop a image by affine transform.
:param image_rgb: input image
:param pts: points
"""
x1, y1, x2, y2, x3, y3, x4, y4 = pts.ravel()
target_pts = np.array([[0, 0], [136, 0], [136, 36], [0, 36]]).astype(np.float32)
org_pts = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]]).astype(np.float32)
mat = cv2.getPerspectiveTransform(org_pts, target_pts)
dsize = (136, 36)
warped = cv2.warpPerspective(image, mat, dsize)
return warped

def finetune(self,image_, stage=2):
"""
cascade fine tune a image by regress four corner of plate.
:param image_rgb: input image
:param stages: cascade stage
"""

tof = image_.copy()
image = cv2.resize(tof, (120, 48))
blob = cv2.dnn.blobFromImage(image, size=(120, 48), swapRB=False, mean=(127.5, 127.5, 127.5), scalefactor=0.0078125, crop=False)
self.refine_net.setInput(blob)
h, w, c = image_.shape
pts = (self.refine_net.forward("conv6-3").reshape(4, 2) * np.array([w, h])).astype(np.int)
g = self.to_refine(image_, pts)
blob = cv2.dnn.blobFromImage(g, size=(120, 48), swapRB=False, mean=(127.5, 127.5, 127.5), scalefactor=0.0078125, crop=False)
self.refine_net.setInput(blob)
h, w, c = g.shape
pts = (self.refine_net.forward("conv6-3").reshape(4, 2) * np.array([w, h])).astype(np.int)
cropped = self.affine_crop(g, pts)
return cropped


def segmentation_free_recognition(self,src):
"""
return: ctc decode results
"""
temp = cv2.resize(src,( 160,40))
temp = temp.transpose(1, 0, 2)
blob = cv2.dnn.blobFromImage(temp, 1/255.0, (40, 160), (0,0,0), False, False)
self.modelRecognition.setInput(blob)
y_pred = self.modelRecognition.forward()[0]
y_pred = y_pred[:,2:,:]
y_pred = np.squeeze(y_pred)
return self.decode_ctc(y_pred)


def plate_recognition(self,image,minSize=30,charSelectionDeskew=True,mode='ssd'):
"""
the simple pipline consists of detection . deskew , fine mapping alignment, recognition.
:param image: the input BGR image from imread used by opencv
:param minSize: the minSize of plate
:param charSelectionDeskew: use character detection when fine mapping stage which will reduce the False Accept Rate as far as possible.
:return: will return [ [plate1 string ,confidence1, location1 ],
[plate2 string ,confidence2, location2 ] ....
]

usage:
import cv2
import numpy as np
from hyperlpr import LPR
pr = LPR("models")
image = cv2.imread("tests/image")
print(pr.plateRecognition(image))
"""

images = self.detect_ssd(image)
res_set = []
for j,plate in enumerate(images):
plate,[left,top,right,bottom] = plate
print(left,top,right,bottom)
cropped = self.loose_crop(image, [left, top, right, bottom], 120 / 48)
cropped_finetuned = self.finetune(cropped)
res, confidence = self.segmentation_free_recognition(cropped_finetuned)
res_set.append([res,confidence,[left,top,right,bottom ]])
return res_set


#

+ 10408
- 0
hyperlpr_pip_pkg/hyperlpr/models/cascade/char/char_single.xml
File diff suppressed because it is too large
View File


+ 1242
- 0
hyperlpr_pip_pkg/hyperlpr/models/cascade/detector/detector_ch.xml
File diff suppressed because it is too large
View File


+ 5
- 0
hyperlpr_pip_pkg/hyperlpr/table_chs.py View File

@@ -0,0 +1,5 @@
chars = [u"京", u"沪", u"津", u"渝", u"冀", u"晋", u"蒙", u"辽", u"吉", u"黑", u"苏", u"浙", u"皖", u"闽", u"赣", u"鲁", u"豫", u"鄂", u"湘", u"粤", u"桂",
u"琼", u"川", u"贵", u"云", u"藏", u"陕", u"甘", u"青", u"宁", u"新", u"0", u"1", u"2", u"3", u"4", u"5", u"6", u"7", u"8", u"9", u"A",
u"B", u"C", u"D", u"E", u"F", u"G", u"H", u"J", u"K", u"L", u"M", u"N", u"P", u"Q", u"R", u"S", u"T", u"U", u"V", u"W", u"X",
u"Y", u"Z",u"港",u"学",u"使",u"警",u"澳",u"挂",u"军",u"北",u"南",u"广",u"沈",u"兰",u"成",u"济",u"海",u"民",u"航",u"空"
]

+ 33
- 0
hyperlpr_pip_pkg/setup.py View File

@@ -0,0 +1,33 @@
import setuptools

# with open("README.md", "r") as fh:
# long_description = fh.read()
long_description = "LPR framework"
setuptools.setup(
name="hyperlpr",
version="0.0.2",
author="Jack Yu",
author_email="jack-yu-business@foxmail.com",
description="A general small license plate recognition framework",
long_description=long_description,
long_description_content_type="text/markdown",
url="https://github.com/zeusees/HyperLPR",
packages=setuptools.find_packages(),
classifiers=(
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 2",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
),
install_requires=[
"opencv-python"
],
package_data={
"hyperlpr": [
"models/cascade/char/*.*",
"models/cascade/detector/*.*",
"models/dnn/*.*"
]
},

)

Loading…
Cancel
Save