文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

CognitiveJ - Java 图像分析库

CognitiveJ 是一个开源的,支持 Java 8 API 的库,用于管理和编排 Java 应用和微软的 Cognitive  (Project Oxford) 机器学习和图像处理库的项目,可以让你查询以及分析图像。

人脸识别

  • 人脸检测– 捕获脸部、性别、年龄等相关脸部特征以及图像的标志
  • 表情检测 – 根据图像中的脸部信息推断出表情状态
  • 验证 – 验证同一个人的两张不同表情的差异
  • 识别 – 根据已知的人里识别出某个人
  • 查找相似 —— 对人脸检测、分组以及排名以找出类似的人脸
  • 分组 – 基于脸部特征进行人的分组
  • Person Group/Person/Face Lists; 创建、管理和训练分组、脸部和人列表用于识别、分组和查找相似的脸部特征
第 1 段(可获 2 积分)

视觉

  • 图像描述 —— 描述图像的可视化内容并返回真实世界中的表述方式
  • 图像分析 —— 抽取图像中的关键信息,例如可判断图片是否包含色情性质
  • OCR – 检测和提取图像中的文字
  • 缩略图 – 根据图像的关键点来创建缩略图

图层 (体验阶段)

  • 应用图像层到多个图像上,将发现的特征进行可视化展现
  • 在人脸和图像上使用字幕
  • 形象的描述脸部和视觉特征集
  • 对图像中的人脸进行像素化

其他特性

第 2 段(可获 2 积分)
  • 支持本地和远程图像
  • 参数校验

开始

  • Java 8
  • MS Cognitive 库的订阅秘钥 (免费注册)
  • 添加来自 JCenter 的依赖
Gradle
repositories {
        jcenter()
    }

    dependencies {
    compile "cognitivej:cognitivej:0.6.2"
    ...
    }
Maven
    <dependency>
      <groupId>cognitivej</groupId>
      <artifactId>cognitivej</artifactId>
      <version>0.6.2</version>
      <type>pom</type>
    </dependency>

链式构建器 - 该构建器是 MS Cognitive REST 服务的简单轻量级封装,用来管理参数和响应、HTTP 通讯和重试策略的编排。构建器使用链式设计模式允许方便的在资源处理过程中进行操作。

第 3 段(可获 2 积分)

场景 - 场景是真实世界的一些用例类,大大的简化了构建器和封装类之间的交互。没有理由不让你直接和构建器打交道,场景提供了更多的样板逻辑来减少负担。

图层覆盖 - 允许基于查询的结构来创建和生成新的图像。注意:碰撞检测以及边界检测正在开发中。

封装器 简单的关于请求、响应和参数对象的封装,例如 Face, FaceAttributes,Person 等等

第 4 段(可获 2 积分)

脸部检测 可以检测图片中的人脸,并返回一组脸部结果集合。

示例
public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"),
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    ImageOverlayBuilder imageOverlayBuilder = ImageOverlayBuilder.builder(IMAGE_URL);
    imageOverlayBuilder.outlineFacesOnImage(faceScenarios.findFaces(IMAGE_URL), RectangleType.FULL,
            CognitiveJColourPalette.STRAWBERRY).launchViewer();
}
第 5 段(可获 2 积分)

脸部特征 用来检测图片中人脸的特征标志信息

示例
public static void main(String[] args) throws IOException {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"), 
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    Face faces = faceScenarios.findSingleFace(IMAGE_URL);
    ImageOverlayBuilder.builder(IMAGE_URL).outFaceLandmarksOnImage(faces).launchViewer();
}

脸部属性检测 显示所检测到的脸部的属性,例如性别、年龄、是否佩戴眼镜等

示例
第 6 段(可获 2 积分)
public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"),
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    List<Face> faces = faceScenarios.findFaces(IMAGE_URL);
    ImageOverlayBuilder.builder(IMAGE_URL).outlineFacesOnImage(faces, RectangleType.CORNERED,
            CognitiveJColourPalette.MEADOW).writeFaceAttributesToTheSide(faces, CognitiveJColourPalette.MEADOW).launchViewer();
}

脸部验证 用来验证两个不同的脸部是否属于一个人,包含一个检测的可靠指数。

第 7 段(可获 2 积分)

示例
public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"),
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    ImageOverlayBuilder.builder(CANDIDATE_1);
    imageOverlayBuilder.verify(CANDIDATE_2, faceScenarios.verifyFaces(CANDIDATE_1, CANDIDATE_2)).launchViewer();
}

脸部标识 标识出图像中的人。在标识之前,我们需要提供一组候选样本,当前最多支持 1000 个候选样本。

第 8 段(可获 2 积分)

示例
public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"), 
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    ImageOverlayBuilder imageOverlayBuilder = ImageOverlayBuilder.builder(IMAGE);
    List<ImageHolder> candidates = candidates();
    People people = ScenarioHelper.createPeopleFromHoldingImages(candidates, ImageNamingStrategy.DEFAULT);
    String groupId = faceScenarios.createGroupWithPeople(randomAlphabetic(6).toLowerCase(), people);
}
第 9 段(可获 2 积分)

脸部像素化 将图像中所有的脸部信息标识出来并进行像素化。

public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"), 
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    ImageOverlayBuilder imageOverlayBuilder = ImageOverlayBuilder.builder(IMAGE);
    faceScenarios.findFaces(IMAGE).stream().forEach(imageOverlayBuilder:: pixelateFaceOnImage);
    imageOverlayBuilder.launchViewer();
}

第 10 段(可获 2 积分)
public static void main(String[] args) {
    FaceScenarios faceScenarios = new FaceScenarios(getProperty("azure.cognitive.subscriptionKey"), 
            getProperty("azure.cognitive.emotion.subscriptionKey"));
    ImageOverlayBuilder.builder(IMAGE_URL).outlineEmotionsOnImage(faceScenarios.findEmotionFaces(IMAGE_URL)).launchViewer();
}

视觉描述 使用人类可读的方式来分析和描述图像中的内容。

public static void main(String[] args) {
    ComputerVisionScenario computerVisionScenario = new ComputerVisionScenario(getProperty("azure.cognitive.vision.subscriptionKey"));
    ImageDescription imageDescription = computerVisionScenario.describeImage(IMAGE_URL);
    ImageOverlayBuilder.builder(IMAGE_URL).describeImage(imageDescription).launchViewer();

}
第 11 段(可获 2 积分)

OCR 用来分析和提取图像中包含的文字信息。

public static void main(String[] args) {
    ComputerVisionScenario computerVisionScenario = new ComputerVisionScenario(getProperty("azure.cognitive.vision.subscriptionKey"));
    OCRResult ocrResult = computerVisionScenario.ocrImage(IMAGE_URL);
    ImageOverlayBuilder.builder(IMAGE_URL).ocrImage(ocrResult).launchViewer();
}
第 12 段(可获 2 积分)

文章评论

CY2
超级强大,只可惜需要跟微软的云服务去交互