Ver Fonte

视频识别

x1ongzhu há 7 anos atrás
pai
commit
fe9431b66c

+ 224 - 1
log.txt

@@ -1 +1,224 @@
-
+[2019-01-30 15:27:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:28:06] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:29:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:37:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:38:10] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:39:10] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 15:40:52] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:17:55] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:19:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:21:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:22:04] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:23:48] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:24:14] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:24:24] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:25:43] [WARN ] - SQL State '08007' of Exception tested by statusOnException() implies that the database is invalid, and the pool should refill itself with fresh Connections.
+com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
+	at com.mysql.jdbc.Util.getInstance(Util.java:384)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
+	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5086)
+	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
+	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
+	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
+	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
+	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
+	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
+	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
+	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
+	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
+	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
+	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
+	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
+[2019-01-30 16:25:43] [WARN ] - A ConnectionTest has failed, reporting that all previously acquired Connections are likely invalid. The pool will be reset.
+[2019-01-30 16:25:43] [WARN ] - [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
+[2019-01-30 16:25:43] [WARN ] - [c3p0] Another error has occurred [ com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. ] which will not be reported to listeners!
+com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
+	at com.mysql.jdbc.Util.getInstance(Util.java:384)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
+	at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1321)
+	at com.mysql.jdbc.ConnectionImpl.checkClosed(ConnectionImpl.java:1313)
+	at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:5311)
+	at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:1059)
+	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion(DataSourceTransactionManager.java:324)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1016)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:883)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
+	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
+	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
+	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
+	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
+	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
+	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
+	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
+	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
+	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
+	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
+Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
+
+The last packet successfully received from the server was 77,876 milliseconds ago.  The last packet sent successfully to the server was 6 milliseconds ago.
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
+	at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1127)
+	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3715)
+	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3604)
+	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4155)
+	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615)
+	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776)
+	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2832)
+	at com.mysql.jdbc.ConnectionImpl.rollbackNoChecks(ConnectionImpl.java:5189)
+	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5072)
+	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
+	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
+	... 23 more
+Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
+	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3161)
+	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3615)
+	... 33 more
+[2019-01-30 16:25:43] [WARN ] - A ConnectionTest has failed, reporting that all previously acquired Connections are likely invalid. The pool will be reset.
+[2019-01-30 16:25:43] [WARN ] - Caught exception while allowing TestExecutionListener [org.springframework.test.context.transaction.TransactionalTestExecutionListener@134f8ef6] to process 'after' execution for test: method [public void RecognitionTest.testRecognition()], instance [RecognitionTest@5a90265a], exception [null]
+org.springframework.transaction.TransactionSystemException: Could not roll back JDBC transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
+	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:297)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853)
+	at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830)
+	at org.springframework.test.context.transaction.TransactionContext.endTransaction(TransactionContext.java:125)
+	at org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:227)
+	at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
+	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
+	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
+	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
+	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
+	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
+	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
+	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
+	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
+	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
+	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
+	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
+	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
+	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
+	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
+	at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
+	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
+	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
+Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during rollback(). Transaction resolution unknown.
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
+	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
+	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
+	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
+	at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
+	at com.mysql.jdbc.Util.getInstance(Util.java:384)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:973)
+	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:918)
+	at com.mysql.jdbc.ConnectionImpl.rollback(ConnectionImpl.java:5086)
+	at com.mchange.v2.c3p0.impl.NewProxyConnection.rollback(NewProxyConnection.java:1033)
+	at org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:294)
+	... 24 more
+[2019-01-30 16:26:22] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:27:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:28:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:33:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:34:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:34:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:36:46] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:37:55] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:39:45] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:40:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:41:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:42:12] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:42:30] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:43:23] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:43:58] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:44:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:46:30] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:48:36] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:49:32] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:50:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:52:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:52:53] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:53:28] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:55:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:56:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 16:57:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 17:07:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 17:08:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 17:09:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:49:38] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:50:00] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:50:37] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:54:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:54:58] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:56:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:56:47] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:57:17] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:58:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 18:59:40] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:05:03] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:05:51] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:06:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:06:54] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:07:37] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:08:16] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:12:35] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:16:19] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:18:24] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:20:18] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:21:15] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:21:39] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:23:07] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:24:13] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:26:29] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:27:02] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:27:36] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:28:25] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:28:41] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.
+[2019-01-30 19:29:33] [WARN ] - Bad pool size config, start 3 < min 5. Using 5 as start.

+ 39 - 10
pom.xml

@@ -280,9 +280,9 @@
             <version>${mysql.driver.version}</version>
         </dependency>
         <!--<dependency>-->
-            <!--<groupId>com.microsoft.sqlserver</groupId>-->
-            <!--<artifactId>sqljdbc4</artifactId>-->
-            <!--<version>${sqlserver.driver.version}</version>-->
+        <!--<groupId>com.microsoft.sqlserver</groupId>-->
+        <!--<artifactId>sqljdbc4</artifactId>-->
+        <!--<version>${sqlserver.driver.version}</version>-->
         <!--</dependency>-->
         <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/sqljdbc4 -->
         <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
@@ -938,9 +938,9 @@
         </dependency>
 
         <!--<dependency>-->
-            <!--<groupId>org.apache.velocity</groupId>-->
-            <!--<artifactId>velocity-engine-core</artifactId>-->
-            <!--<version>2.0</version>-->
+        <!--<groupId>org.apache.velocity</groupId>-->
+        <!--<artifactId>velocity-engine-core</artifactId>-->
+        <!--<version>2.0</version>-->
         <!--</dependency>-->
         <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
         <dependency>
@@ -962,10 +962,10 @@
             <version>3.1.3</version>
         </dependency>
         <!--<dependency>-->
-            <!--<groupId>com.baidu</groupId>-->
-            <!--<artifactId>ueditor</artifactId>-->
-            <!--<version>1.1.2</version>-->
-            <!--<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ueditor-1.1.2.jar</systemPath>-->
+        <!--<groupId>com.baidu</groupId>-->
+        <!--<artifactId>ueditor</artifactId>-->
+        <!--<version>1.1.2</version>-->
+        <!--<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ueditor-1.1.2.jar</systemPath>-->
         <!--</dependency>-->
 
         <dependency>
@@ -993,6 +993,35 @@
             <version>3.3.49.ALL</version>
         </dependency>
 
+        <dependency>
+            <groupId>net.sourceforge.tess4j</groupId>
+            <artifactId>tess4j</artifactId>
+            <version>4.3.1</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>log4j-over-slf4j</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <dependency>
+            <groupId>net.sourceforge.lept4j</groupId>
+            <artifactId>lept4j</artifactId>
+            <version>1.11.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.opencv.opencv</groupId>
+            <artifactId>opencv</artifactId>
+            <version>4.0.1</version>
+        </dependency>
+
+        <dependency>
+            <groupId>net.java.dev.jna</groupId>
+            <artifactId>jna</artifactId>
+            <version>4.1.0</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 9 - 0
src/main/java/com/izouma/awesomeadmin/service/VideoRecognitionService.java

@@ -0,0 +1,9 @@
+package com.izouma.awesomeadmin.service;
+
+import org.opencv.core.Mat;
+
+public interface VideoRecognitionService {
+    String extractRank(Mat inputImage);
+
+    String extractGameTime(Mat inputImage);
+}

+ 252 - 0
src/main/java/com/izouma/awesomeadmin/service/impl/VideoRecognitionServiceImpl.java

@@ -0,0 +1,252 @@
+package com.izouma.awesomeadmin.service.impl;
+
+import com.izouma.awesomeadmin.service.VideoRecognitionService;
+import com.sun.jna.Library;
+import com.sun.jna.Native;
+import com.sun.jna.Platform;
+import net.sourceforge.tess4j.ITesseract;
+import net.sourceforge.tess4j.Tesseract;
+import net.sourceforge.tess4j.TesseractException;
+import org.apache.commons.lang.StringUtils;
+import org.opencv.core.*;
+import org.opencv.highgui.HighGui;
+import org.opencv.imgproc.Imgproc;
+import org.springframework.stereotype.Service;
+
+import javax.imageio.ImageIO;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBufferByte;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.opencv.core.CvType.*;
+import static org.opencv.highgui.HighGui.*;
+import static org.opencv.imgcodecs.Imgcodecs.*;
+import static org.opencv.imgproc.Imgproc.*;
+
+@Service
+public class VideoRecognitionServiceImpl implements VideoRecognitionService {
+    public static boolean DEBUG = false;
+
+    static {
+
+        CLibrary.INSTANCE.setlocale(CLibrary.LC_ALL, "C");
+        CLibrary.INSTANCE.setlocale(CLibrary.LC_NUMERIC, "C");
+        CLibrary.INSTANCE.setlocale(CLibrary.LC_CTYPE, "C");
+
+        System.load("/usr/local/Cellar/opencv/4.0.1/share/java/opencv4/libopencv_java401.so");
+        System.load("/usr/local/Cellar/tesseract/4.0.0/lib/libtesseract.4.dylib");
+    }
+
+    public interface CLibrary extends Library {
+        CLibrary INSTANCE = (CLibrary) Native.loadLibrary((Platform.isWindows() ? "msvcrt" : "c"), CLibrary.class);
+
+        int LC_CTYPE   = 0;
+        int LC_NUMERIC = 1;
+        int LC_ALL     = 6;
+
+        // char *setlocale(int category, const char *locale);
+        String setlocale(int category, String locale);
+    }
+
+    @Override
+    public String extractRank(Mat inputImage) {
+        String result = null;
+        int m = inputImage.rows();
+        int n = inputImage.cols();
+        inputImage = inputImage.rowRange(0, (int) (m * 0.5)).colRange((int) (n * 0.5), n);
+
+        Mat resultGray = new Mat(inputImage.rows(), inputImage.cols(), CV_8U, new Scalar(0));
+        Mat resultColor = new Mat(inputImage.rows(), inputImage.cols(), CV_8UC3, new Scalar(255, 255, 255));
+        HSVFilter(inputImage, resultGray, resultColor, 25, 65, 40, 255, 130, 255);
+        imshow("gray", resultGray);
+
+        int erosion_size = m / 400;
+        erode(resultGray, resultGray, erosion_size);
+
+        int dilation_size = m / 400 * 4;
+        dilate(resultGray, resultGray, dilation_size);
+
+        List<MatOfPoint> contours = new ArrayList<>();
+        Mat hierarchy = new Mat();
+        findContours(resultGray, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
+        Rect textRect = new Rect();
+        for (int i = 0; i < contours.size(); i++) {
+            Rect rect = boundingRect(contours.get(i));
+            if (rect.area() > textRect.area()) {
+                textRect = rect;
+            }
+        }
+        if (textRect.width > 0 && textRect.height > 0) {
+            Mat textImg = inputImage.rowRange(textRect.y, textRect.y + textRect.height).colRange(textRect.x, textRect.x + textRect.width);
+            Mat mat1 = new Mat(textImg.rows(), textImg.cols(), CV_8UC1);
+            for (int i = 0; i < textImg.rows(); i++) {
+                for (int j = 0; j < textImg.cols(); j++) {
+                    double s = (textImg.get(i, j)[1] + textImg.get(i, j)[2]) / 2;
+                    mat1.put(i, j, s > 220 ? s : 0);
+                }
+            }
+            System.out.println(mat1.dump());
+            imshow("text", textImg);
+            medianBlur(mat1, mat1, 3);
+            imshow("mat1", mat1);
+            imwrite("/Users/drew/Desktop/text.jpg", mat1);
+            for (MatOfPoint contour : contours) {
+                Rect rect = boundingRect(contour);
+                rectangle(inputImage, rect, new Scalar(0, 0, 255), 1);
+            }
+            rectangle(inputImage, textRect, new Scalar(0, 255, 0), 2);
+            imshow("inputImage", inputImage);
+            result = doOCR(mat1);
+        }
+        if (DEBUG) {
+            waitKey(0);
+        }
+        return result;
+    }
+
+    @Override
+    public String extractGameTime(Mat inputImage) {
+        String result = null;
+        int m = inputImage.rows();
+        int n = inputImage.cols();
+        inputImage = inputImage.rowRange((int) (m * 0.5), (int) (m * 0.8)).colRange((int) (n * 0.5), n);
+
+        Mat resultGray = new Mat(inputImage.rows(), inputImage.cols(), CV_8U, new Scalar(0));
+        Mat resultColor = new Mat(inputImage.rows(), inputImage.cols(), CV_8UC3, new Scalar(255, 255, 255));
+        HSVFilter(inputImage, resultGray, resultColor, 15, 28, 80, 255, 80, 255);
+        imshow("gray", resultGray);
+
+        int dilation_size = resultGray.rows() / 120 * 3;
+        dilate(resultGray, resultGray, dilation_size);
+
+        int erosion_size = resultGray.rows() / 120 * 3;
+        erode(resultGray, resultGray, erosion_size);
+
+        List<MatOfPoint> contours = new ArrayList<>();
+        Mat hierarchy = new Mat();
+        findContours(resultGray, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
+        Rect textRect = new Rect();
+        for (int i = 0; i < contours.size(); i++) {
+            Rect rect = boundingRect(contours.get(i));
+            if (rect.area() > textRect.area()) {
+                textRect = rect;
+            }
+        }
+        if (textRect.width > 0 && textRect.height > 0) {
+            Mat textImg = inputImage.rowRange(textRect.y - 5, textRect.y + textRect.height + 5).colRange(textRect.x - 5, textRect.x + textRect.width + 5);
+            textImg.convertTo(textImg, CV_8UC3);
+            Mat imageBf = new Mat();
+            bilateralFilter(textImg, imageBf, 3, 3, 2);//双边滤波
+            Mat imageEnhance = new Mat();
+            Mat kernel = new Mat(3, 3, CV_32F);
+            kernel.put(0, 0, 0);
+            kernel.put(0, 1, -1);
+            kernel.put(0, 2, 0);
+            kernel.put(1, 0, 0);
+            kernel.put(1, 1, 4);
+            kernel.put(1, 2, 0);
+            kernel.put(2, 0, 0);
+            kernel.put(2, 1, -1);
+            kernel.put(2, 2, 0);
+            filter2D(imageBf, imageEnhance, CV_8UC3, kernel);
+            imshow("text", textImg);
+            imshow("imageBf", imageBf);
+            imshow("imageEnhance", imageEnhance);
+            cvtColor(textImg, textImg, COLOR_BGR2GRAY);
+            textImg.convertTo(textImg, CV_8UC1);
+            imwrite("/Users/drew/Desktop/text.jpg", textImg);
+            for (MatOfPoint contour : contours) {
+                Rect rect = boundingRect(contour);
+                rectangle(inputImage, rect, new Scalar(0, 0, 255), 1);
+            }
+            rectangle(inputImage, textRect, new Scalar(0, 255, 0), 1);
+            imshow("inputImage", inputImage);
+
+            result = doOCR(textImg);
+        }
+        if (DEBUG) {
+            waitKey(0);
+        }
+        return result;
+    }
+
+    private void dilate(Mat src, Mat dst, int dilation_size) {
+        Mat dilationElement = getStructuringElement(MORPH_ELLIPSE,
+                new Size(2 * dilation_size + 1, 2 * dilation_size + 1),
+                new Point(dilation_size, dilation_size));
+        Imgproc.dilate(src, dst, dilationElement);
+        imshow("dilate", dst);
+    }
+
+    private void erode(Mat src, Mat dst, int erosion_size) {
+        Mat erodeElement = getStructuringElement(MORPH_RECT,
+                new Size(2 * erosion_size + 1, 2 * erosion_size + 1),
+                new Point(erosion_size, erosion_size));
+        Imgproc.erode(src, dst, erodeElement);
+        imshow("erode", dst);
+    }
+
+    private BufferedImage createBufferedImage(Mat mat) {
+        MatOfByte mob = new MatOfByte();
+        imencode(".jpg", mat, mob);
+        byte ba[] = mob.toArray();
+        BufferedImage bi = null;
+        try {
+            bi = ImageIO.read(new ByteArrayInputStream(ba));
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return bi;
+    }
+
+    private void HSVFilter(Mat inputImage, Mat resultGray, Mat resultColor, int h_min, int h_max, int s_min, int s_max, int v_min, int v_max) {
+        Mat hsvImage = new Mat();
+        blur(inputImage, hsvImage, new Size(3, 3));
+        cvtColor(hsvImage, hsvImage, COLOR_BGR2HSV);
+        double H = 0.0, S = 0.0, V = 0.0;
+        for (int i = 0; i < hsvImage.rows(); i++) {
+            for (int j = 0; j < hsvImage.cols(); j++) {
+                H = hsvImage.get(i, j)[0];
+                S = hsvImage.get(i, j)[1];
+                V = hsvImage.get(i, j)[2];
+
+                if ((H >= h_min && H <= h_max)
+                        && (S >= s_min && S <= s_max)
+                        && (V >= v_min && V <= v_max)) {
+                    resultGray.put(i, j, 255d);
+                    resultColor.put(i, j, inputImage.get(i, j));
+                }
+            }
+        }
+    }
+
+    private String doOCR(Mat img) {
+        BufferedImage bi = createBufferedImage(img);
+        ITesseract instance = new Tesseract();
+        instance.setDatapath("/usr/local/Cellar/tesseract/4.0.0/share/tessdata");
+        instance.setPageSegMode(7);
+        instance.setLanguage("pubg");
+        try {
+            String result = instance.doOCR(bi);
+            if (StringUtils.isNotEmpty(result)) {
+                System.out.println(result);
+                return result;
+            }
+        } catch (TesseractException e) {
+            System.err.println(e.getMessage());
+        }
+        return null;
+    }
+
+    private void imshow(String name, Mat img) {
+        if (DEBUG) {
+            Mat copy = new Mat();
+            img.copyTo(copy);
+            HighGui.imshow(name, copy);
+        }
+    }
+}

+ 34 - 0
src/test/java/RecognitionTest.java

@@ -0,0 +1,34 @@
+import com.izouma.awesomeadmin.service.VideoRecognitionService;
+import com.izouma.awesomeadmin.service.impl.VideoRecognitionServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.opencv.core.Mat;
+import org.opencv.imgcodecs.Imgcodecs;
+import org.opencv.imgproc.Imgproc;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.GenericXmlContextLoader;
+import org.springframework.transaction.annotation.Transactional;
+
+@RunWith(value = SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = {"classpath:/spring/applicationContext.xml"}, loader = GenericXmlContextLoader.class)
+@Transactional
+public class RecognitionTest {
+
+
+    @Autowired
+    private VideoRecognitionService videoRecognitionService;
+
+    @Test
+    public void testRecognition() {
+        VideoRecognitionServiceImpl.DEBUG = true;
+        Mat img = Imgcodecs.imread("/Users/drew/Desktop/屏幕快照 2019-01-16 上午9.35.17.png");
+        // Mat img = Imgcodecs.imread("/Users/drew/Desktop/has/IMG_0789.png");
+        // String time = videoRecognitionService.extractGameTime(img);
+        // System.out.println("time:" + time);
+
+        String rank = videoRecognitionService.extractRank(img);
+        System.out.println("rank:" + rank);
+    }
+}