dcs před 4 roky
revize
97217186c4
41 změnil soubory, kde provedl 935 přidání a 0 odebrání
  1. 5 0
      .gitignore
  2. 12 0
      .settings/.jsdtscope
  3. 4 0
      .settings/org.eclipse.core.resources.prefs
  4. 12 0
      .settings/org.eclipse.jdt.core.prefs
  5. 4 0
      .settings/org.eclipse.m2e.core.prefs
  6. 10 0
      .settings/org.eclipse.wst.common.component
  7. 8 0
      .settings/org.eclipse.wst.common.project.facet.core.xml
  8. 1 0
      .settings/org.eclipse.wst.jsdt.ui.superType.container
  9. 1 0
      .settings/org.eclipse.wst.jsdt.ui.superType.name
  10. 2 0
      .settings/org.eclipse.wst.validation.prefs
  11. 2 0
      .settings/org.springframework.ide.eclipse.prefs
  12. 62 0
      pom.xml
  13. 26 0
      src/main/java/com/bosshand/face/CorsConfig.java
  14. 13 0
      src/main/java/com/bosshand/face/FaceApplication.java
  15. 32 0
      src/main/java/com/bosshand/face/SwaggerConfig.java
  16. 51 0
      src/main/java/com/bosshand/face/controller/AgePicController.java
  17. 25 0
      src/main/java/com/bosshand/face/dto/Dto.java
  18. 25 0
      src/main/java/com/bosshand/face/dto/LoginDto.java
  19. 30 0
      src/main/java/com/bosshand/face/response/BaseResponse.java
  20. 22 0
      src/main/java/com/bosshand/face/response/Response.java
  21. 55 0
      src/main/java/com/bosshand/face/utils/ChangeAgePic.java
  22. 8 0
      src/main/resources/application.properties
  23. binární
      src/main/resources/static/age_gender_model-shard1
  24. 368 0
      src/main/resources/static/age_gender_model-weights_manifest.json
  25. binární
      src/main/resources/static/face_expression_model-shard1
  26. 1 0
      src/main/resources/static/face_expression_model-weights_manifest.json
  27. binární
      src/main/resources/static/face_landmark_68_model-shard1
  28. 1 0
      src/main/resources/static/face_landmark_68_model-weights_manifest.json
  29. binární
      src/main/resources/static/face_landmark_68_tiny_model-shard1
  30. 1 0
      src/main/resources/static/face_landmark_68_tiny_model-weights_manifest.json
  31. binární
      src/main/resources/static/face_recognition_model-shard1
  32. 6 0
      src/main/resources/static/face_recognition_model-shard2
  33. 1 0
      src/main/resources/static/face_recognition_model-weights_manifest.json
  34. 7 0
      src/main/resources/static/index.html
  35. binární
      src/main/resources/static/mtcnn_model-shard1
  36. 1 0
      src/main/resources/static/mtcnn_model-weights_manifest.json
  37. binární
      src/main/resources/static/ssd_mobilenetv1_model-shard1
  38. 137 0
      src/main/resources/static/ssd_mobilenetv1_model-shard2
  39. 1 0
      src/main/resources/static/ssd_mobilenetv1_model-weights_manifest.json
  40. binární
      src/main/resources/static/tiny_face_detector_model-shard1
  41. 1 0
      src/main/resources/static/tiny_face_detector_model-weights_manifest.json

+ 5 - 0
.gitignore

@@ -0,0 +1,5 @@
+**/target/
+.project
+.classpath
+
+

+ 12 - 0
.settings/.jsdtscope

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry excluding="**/bower_components/*|**/node_modules/*|**/*.min.js" kind="src" path="src/main/webapp"/>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+		<attributes>
+			<attribute name="hide" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+	<classpathentry kind="output" path=""/>
+</classpath>

+ 4 - 0
.settings/org.eclipse.core.resources.prefs

@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding/<project>=UTF-8

+ 12 - 0
.settings/org.eclipse.jdt.core.prefs

@@ -0,0 +1,12 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.methodParameters=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8

+ 4 - 0
.settings/org.eclipse.m2e.core.prefs

@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1

+ 10 - 0
.settings/org.eclipse.wst.common.component

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
+    <wb-module deploy-name="face">
+        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
+        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
+        <property name="context-root" value="face"/>
+        <property name="java-output-path" value="/face/target/classes"/>
+    </wb-module>
+</project-modules>

+ 8 - 0
.settings/org.eclipse.wst.common.project.facet.core.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+  <fixed facet="wst.jsdt.web"/>
+  <installed facet="cloudfoundry.standalone.app" version="1.0"/>
+  <installed facet="java" version="1.8"/>
+  <installed facet="wst.jsdt.web" version="1.0"/>
+  <installed facet="jst.web" version="4.0"/>
+</faceted-project>

+ 1 - 0
.settings/org.eclipse.wst.jsdt.ui.superType.container

@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary

+ 1 - 0
.settings/org.eclipse.wst.jsdt.ui.superType.name

@@ -0,0 +1 @@
+Window

+ 2 - 0
.settings/org.eclipse.wst.validation.prefs

@@ -0,0 +1,2 @@
+disabled=06target
+eclipse.preferences.version=1

+ 2 - 0
.settings/org.springframework.ide.eclipse.prefs

@@ -0,0 +1,2 @@
+boot.validation.initialized=true
+eclipse.preferences.version=1

+ 62 - 0
pom.xml

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.springframework.boot</groupId>
+		<artifactId>spring-boot-starter-parent</artifactId>
+		<version>2.3.4.RELEASE</version>
+		<relativePath /> <!-- lookup parent from repository -->
+	</parent>
+	<groupId>com.bosshand.face</groupId>
+	<artifactId>face</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<name>face</name>
+	<description>Face project for Spring Boot</description>
+
+	<properties>
+		<java.version>1.8</java.version>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-web</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger2</artifactId>
+			<version>2.4.0</version>
+		</dependency>
+		<dependency>
+			<groupId>io.springfox</groupId>
+			<artifactId>springfox-swagger-ui</artifactId>
+			<version>2.4.0</version>
+		</dependency>
+		<dependency>
+			<groupId>com.tencentcloudapi</groupId>
+			<artifactId>tencentcloud-sdk-java</artifactId>
+			<version>3.1.138</version>
+		</dependency>
+		<dependency>
+		    <groupId>com.alibaba</groupId>
+		    <artifactId>fastjson</artifactId>
+		    <version>1.2.66</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.springframework.boot</groupId>
+				<artifactId>spring-boot-maven-plugin</artifactId>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>

+ 26 - 0
src/main/java/com/bosshand/face/CorsConfig.java

@@ -0,0 +1,26 @@
+package com.bosshand.face;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.cors.CorsConfiguration;
+import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
+import org.springframework.web.filter.CorsFilter; 
+
+@Configuration
+public class CorsConfig {
+	private CorsConfiguration buildConfig() {
+		CorsConfiguration corsConfiguration = new CorsConfiguration();
+		corsConfiguration.addAllowedOrigin("*");
+		corsConfiguration.addAllowedHeader("*");
+		corsConfiguration.addAllowedMethod("*");
+		return corsConfiguration;
+	}
+
+	@Bean
+	public CorsFilter corsFilter() {
+		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
+		source.registerCorsConfiguration("/**", buildConfig());
+		return new CorsFilter(source);
+	}
+
+}

+ 13 - 0
src/main/java/com/bosshand/face/FaceApplication.java

@@ -0,0 +1,13 @@
+package com.bosshand.face;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class FaceApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(FaceApplication.class, args);
+	}
+
+}

+ 32 - 0
src/main/java/com/bosshand/face/SwaggerConfig.java

@@ -0,0 +1,32 @@
+package com.bosshand.face;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+@Configuration
+@EnableSwagger2
+public class SwaggerConfig {
+
+  private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = 
+    new HashSet<String>(Arrays.asList("application/json",
+          "application/json"));
+
+	@Bean
+	public Docket api(){
+		return new Docket(DocumentationType.SWAGGER_2)
+		.select()
+		.apis(RequestHandlerSelectors.any())  
+		.build()               
+		.produces(DEFAULT_PRODUCES_AND_CONSUMES)
+	  .consumes(DEFAULT_PRODUCES_AND_CONSUMES);
+	}
+}

+ 51 - 0
src/main/java/com/bosshand/face/controller/AgePicController.java

@@ -0,0 +1,51 @@
+package com.bosshand.face.controller;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.fastjson.JSON;
+import com.bosshand.face.dto.Dto;
+import com.bosshand.face.dto.LoginDto;
+import com.bosshand.face.response.Response;
+import com.bosshand.face.utils.ChangeAgePic;
+
+@RestController
+public class AgePicController {
+
+	@Value("${test.user}")
+	private String user;
+
+	@Value("${test.secretId}")
+	private String secretId;
+
+	@Value("${test.secretKey}")
+	private String secretKey;
+
+	@RequestMapping(value = "/pic", method = RequestMethod.POST)
+	public Response create(@RequestBody Dto dto) {
+		List<LoginDto> list = JSON.parseArray(user, LoginDto.class);
+		for (LoginDto loginDto : list) {
+			if (loginDto.getName().equals(dto.getName())) {
+				return Response.ok(ChangeAgePic.getFaceList(dto.getBase64(), secretId, secretKey));
+			}
+		}
+		return Response.fail(20000, "请联系管理员!!!!");
+	}
+
+	@RequestMapping(value = "/login", method = RequestMethod.POST)
+	public Response login(@RequestBody LoginDto loginDto) {
+		List<LoginDto> list = JSON.parseArray(user, LoginDto.class);
+		for (LoginDto dto : list) {
+			if (dto.getName().equals(loginDto.getName()) & dto.getPassword().equals(loginDto.getPassword())) {
+				return Response.ok(loginDto.getName());
+			}
+		}
+		return Response.fail(20000, "用户名或密码错误!!!");
+	}
+
+}

+ 25 - 0
src/main/java/com/bosshand/face/dto/Dto.java

@@ -0,0 +1,25 @@
+package com.bosshand.face.dto;
+
+public class Dto {
+
+	private String base64;
+
+	private String name;
+
+	public String getBase64() {
+		return base64;
+	}
+
+	public void setBase64(String base64) {
+		this.base64 = base64;
+	}
+	
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}

+ 25 - 0
src/main/java/com/bosshand/face/dto/LoginDto.java

@@ -0,0 +1,25 @@
+package com.bosshand.face.dto;
+
+public class LoginDto {
+
+	private String name;
+
+	private String password;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+}

+ 30 - 0
src/main/java/com/bosshand/face/response/BaseResponse.java

@@ -0,0 +1,30 @@
+package com.bosshand.face.response;
+
+public class BaseResponse<T> {
+	
+	final static int CODE_OK = 200;
+	
+	int code = CODE_OK;
+	String message;
+	T data;
+	
+	public int getCode() {
+		return code;
+	}
+	public void setCode(int code) {
+		this.code = code;
+	}
+	public String getMessage() {
+		return message;
+	}
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	public Object getData() {
+		return data;
+	}
+	public void setData(T data) {
+		this.data = data;
+	}
+		
+}

+ 22 - 0
src/main/java/com/bosshand/face/response/Response.java

@@ -0,0 +1,22 @@
+package com.bosshand.face.response;
+
+public class Response extends BaseResponse<Object>{
+	
+	public static Response ok() {
+		return new Response();
+	}
+	
+	public static Response fail(int code, String message) {
+		Response response  = new Response();
+		response.setCode(code);
+		response.setMessage(message);
+		return response;
+	}
+	
+	public static Response ok(Object data) {
+		Response response  = new Response();
+		response.setData(data);
+		return response;
+	}
+	
+}

+ 55 - 0
src/main/java/com/bosshand/face/utils/ChangeAgePic.java

@@ -0,0 +1,55 @@
+package com.bosshand.face.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.ft.v20200304.FtClient;
+import com.tencentcloudapi.ft.v20200304.models.AgeInfo;
+import com.tencentcloudapi.ft.v20200304.models.ChangeAgePicRequest;
+import com.tencentcloudapi.ft.v20200304.models.ChangeAgePicResponse;;
+
+public class ChangeAgePic {
+
+	private final static Log log = LogFactory.getLog(ChangeAgePic.class);
+
+	public static ChangeAgePicResponse create(long age, String base64, String secretId, String secretKey) {
+		try {
+			Credential cred = new Credential(secretId, secretKey);
+			HttpProfile httpProfile = new HttpProfile();
+			httpProfile.setEndpoint("ft.tencentcloudapi.com");
+			ClientProfile clientProfile = new ClientProfile();
+			clientProfile.setHttpProfile(httpProfile);
+			FtClient client = new FtClient(cred, "ap-shanghai", clientProfile);
+			ChangeAgePicRequest req = new ChangeAgePicRequest();
+			AgeInfo[] ageInfos1 = new AgeInfo[1];
+			AgeInfo ageInfo1 = new AgeInfo();
+			ageInfo1.setAge(age);
+			ageInfos1[0] = ageInfo1;
+			req.setImage(base64);
+			req.setAgeInfos(ageInfos1);
+			req.setRspImgType("url");
+			ChangeAgePicResponse resp = client.ChangeAgePic(req);
+			return resp;
+		} catch (TencentCloudSDKException e) {
+			log.error(e.toString());
+		}
+		return null;
+	}
+
+	public static Map<Integer, String> getFaceList(String base64, String secretId, String secretKey) {
+		Map<Integer, String> map = new HashMap<>();
+		map.clear();
+		for (int i = 10; i <= 80; i += 10) {
+			map.put(i, create(i, base64, secretId, secretKey).getResultUrl());
+		}
+		return map;
+	}
+
+}

+ 8 - 0
src/main/resources/application.properties

@@ -0,0 +1,8 @@
+server.port=8088
+
+test.secretId=AKIDe18yg4W5IwPbZQiHJsJTO2yh9JXZos9X
+test.secretKey=0nYDdmeEyS1J43mFROITN1NVMwFrDH9v
+
+test.user=[{"name":"bosshand","password":"bosshand"},{"name":"vincent","password":"123456"}]
+
+

binární
src/main/resources/static/age_gender_model-shard1


+ 368 - 0
src/main/resources/static/age_gender_model-weights_manifest.json

@@ -0,0 +1,368 @@
+[{
+	"weights": [{
+		"name": "entry_flow/conv_in/filters",
+		"shape": [3, 3, 3, 32],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.005431825039433498,
+			"min": -0.7441600304023892
+		}
+	}, {
+		"name": "entry_flow/conv_in/bias",
+		"shape": [32],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv0/depthwise_filter",
+		"shape": [3, 3, 32, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.005691980614381678,
+			"min": -0.6090419257388395
+		}
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv0/pointwise_filter",
+		"shape": [1, 1, 32, 64],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.009089225881239947,
+			"min": -1.1179747833925135
+		}
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv0/bias",
+		"shape": [64],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv1/depthwise_filter",
+		"shape": [3, 3, 64, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.00683894624897078,
+			"min": -0.8138346036275228
+		}
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv1/pointwise_filter",
+		"shape": [1, 1, 64, 64],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.011632566358528886,
+			"min": -1.3028474321552352
+		}
+	}, {
+		"name": "entry_flow/reduction_block_0/separable_conv1/bias",
+		"shape": [64],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_0/expansion_conv/filters",
+		"shape": [1, 1, 32, 64],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.010254812240600587,
+			"min": -0.9229331016540528
+		}
+	}, {
+		"name": "entry_flow/reduction_block_0/expansion_conv/bias",
+		"shape": [64],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv0/depthwise_filter",
+		"shape": [3, 3, 64, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.0052509616403018725,
+			"min": -0.6406173201168285
+		}
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv0/pointwise_filter",
+		"shape": [1, 1, 64, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.010788509424994973,
+			"min": -1.4564487723743214
+		}
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv0/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv1/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.00553213918910307,
+			"min": -0.7025816770160899
+		}
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv1/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.013602388606351965,
+			"min": -1.6186842441558837
+		}
+	}, {
+		"name": "entry_flow/reduction_block_1/separable_conv1/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "entry_flow/reduction_block_1/expansion_conv/filters",
+		"shape": [1, 1, 64, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.007571851038465313,
+			"min": -1.158493208885193
+		}
+	}, {
+		"name": "entry_flow/reduction_block_1/expansion_conv/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv0/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.005766328409606335,
+			"min": -0.6688940955143349
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv0/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.012136116214826995,
+			"min": -1.5776951079275094
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv0/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv1/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.004314773222979377,
+			"min": -0.5652352922102984
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv1/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.01107162026798024,
+			"min": -1.2400214700137868
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv1/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv2/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.0036451735917259667,
+			"min": -0.4848080876995536
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv2/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.008791744942758598,
+			"min": -1.134135097615859
+		}
+	}, {
+		"name": "middle_flow/main_block_0/separable_conv2/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv0/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.004915751896652521,
+			"min": -0.6095532351849126
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv0/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.010868691463096469,
+			"min": -1.3368490499608656
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv0/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv1/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.005010117269029804,
+			"min": -0.6012140722835765
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv1/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.010311148213405235,
+			"min": -1.3816938605963016
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv1/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv2/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.004911523706772748,
+			"min": -0.7367285560159123
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv2/pointwise_filter",
+		"shape": [1, 1, 128, 128],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.008976466047997568,
+			"min": -1.2207993825276693
+		}
+	}, {
+		"name": "middle_flow/main_block_1/separable_conv2/bias",
+		"shape": [128],
+		"dtype": "float32"
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv0/depthwise_filter",
+		"shape": [3, 3, 128, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.005074804436926748,
+			"min": -0.7104726211697447
+		}
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv0/pointwise_filter",
+		"shape": [1, 1, 128, 256],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.011453078307357489,
+			"min": -1.4545409450344011
+		}
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv0/bias",
+		"shape": [256],
+		"dtype": "float32"
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv1/depthwise_filter",
+		"shape": [3, 3, 256, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.007741751390344957,
+			"min": -1.1380374543807086
+		}
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv1/pointwise_filter",
+		"shape": [1, 1, 256, 256],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.011347713189966538,
+			"min": -1.497898141075583
+		}
+	}, {
+		"name": "exit_flow/reduction_block/separable_conv1/bias",
+		"shape": [256],
+		"dtype": "float32"
+	}, {
+		"name": "exit_flow/reduction_block/expansion_conv/filters",
+		"shape": [1, 1, 128, 256],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.006717281014311547,
+			"min": -0.8329428457746318
+		}
+	}, {
+		"name": "exit_flow/reduction_block/expansion_conv/bias",
+		"shape": [256],
+		"dtype": "float32"
+	}, {
+		"name": "exit_flow/separable_conv/depthwise_filter",
+		"shape": [3, 3, 256, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.0027201742518181892,
+			"min": -0.3237007359663645
+		}
+	}, {
+		"name": "exit_flow/separable_conv/pointwise_filter",
+		"shape": [1, 1, 256, 512],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.010076364348916447,
+			"min": -1.330080094056971
+		}
+	}, {
+		"name": "exit_flow/separable_conv/bias",
+		"shape": [512],
+		"dtype": "float32"
+	}, {
+		"name": "fc/age/weights",
+		"shape": [512, 1],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.008674054987290326,
+			"min": -1.2664120281443876
+		}
+	}, {
+		"name": "fc/age/bias",
+		"shape": [1],
+		"dtype": "float32"
+	}, {
+		"name": "fc/gender/weights",
+		"shape": [512, 2],
+		"dtype": "float32",
+		"quantization": {
+			"dtype": "uint8",
+			"scale": 0.0029948226377075793,
+			"min": -0.34140978069866407
+		}
+	}, {
+		"name": "fc/gender/bias",
+		"shape": [2],
+		"dtype": "float32"
+	}],
+	"paths": ["age_gender_model-shard1"]
+}]

binární
src/main/resources/static/face_expression_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/face_expression_model-weights_manifest.json


binární
src/main/resources/static/face_landmark_68_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/face_landmark_68_model-weights_manifest.json


binární
src/main/resources/static/face_landmark_68_tiny_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/face_landmark_68_tiny_model-weights_manifest.json


binární
src/main/resources/static/face_recognition_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 6 - 0
src/main/resources/static/face_recognition_model-shard2


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/face_recognition_model-weights_manifest.json


+ 7 - 0
src/main/resources/static/index.html

@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+	        <meta charset="utf-8">
+	        <title></title>
+	</head>
+</html>

binární
src/main/resources/static/mtcnn_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/mtcnn_model-weights_manifest.json


binární
src/main/resources/static/ssd_mobilenetv1_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 137 - 0
src/main/resources/static/ssd_mobilenetv1_model-shard2


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/ssd_mobilenetv1_model-weights_manifest.json


binární
src/main/resources/static/tiny_face_detector_model-shard1


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
src/main/resources/static/tiny_face_detector_model-weights_manifest.json