?

2009年3月31日,微软发布了 Microsoft Visual Studio International Pack 1.0 SR1。Visual Studio International Pack 包含一组类库,该类库扩展了.NET Framework对全球化软件开发的支持。使用该类库提供的类,.NET 开发人员可以更方便的创建支持多文化多语言的软件应用。下载地址是:http://www.sxzhongrui.com/downloads/details.aspx?FamilyID=44cac7f0-633b-477d-aed2-99aee642fc10&DisplayLang=zh-cn? 该软件包1.0版提供下面七个组件以增强.NET Framework对全球化软件应用开发的支持。

East Asia Numeric Formatting Library - 支持将小写的数字字符串格式化成简体中文,繁体中文,日文和韩文的大写数字字符串。 Japanese Kana Conversion Library - 支持将日文假名(Kana)转化为另一种日文字符。 Japanese Text Alignment Library - 支持日文特有的一种对齐格式。 Japanese Yomi Auto-Completion Library - 类库支持感知日文输入法的输入自动完成和一个文本框控件的示例。 Korean Auto Complete TextBox Control - 支持韩文输入法的智能感知和输入自动完成的文本框控件。 Simplified Chinese Pin-Yin Conversion Library - 支持获取简体中文字符的常用属性比如拼音,多音字,同音字,笔画数。 Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool - 支持简繁体中文之间的转换。该组件还包含一个Visual Studio集成开发环境中的插件(Add-in)支持简繁体中文资源文件之间的转换。

?

下载完毕后,进行解压,里面有7个msi文件,其中:CHSPinYinConv.msi就是汉字拼音相关的,CHTCHSConv.msi是进行简体与繁体进行相互转换的,值安装这2个msi即可。安装完毕后,需要在VS里添加引用,分别引用:C:/Program Files/Microsoft Visual Studio International Pack/Simplified Chinese Pin-Yin Conversion Library下和C:/Program Files/Microsoft Visual Studio International Pack/Traditional Chinese to Simplified Chinese Conversion Library and Add-In Tool下的dll即可使用。下面是一个汉字“孟”的测试例子:

?

C# 代码

using

System;

using

System.Collections.Generic;

using

System.Web;

using

System.Web.UI;

using

System.Web.UI.WebControls;

using

Microsoft.International.Converters.PinYinConverter;

using

Microsoft.International.Converters.TraditionalChineseToSimplifiedConverter;

using

System.Collections.ObjectModel;

public

partial

class

Default2 : www.sxzhongrui.com{??

protected

void

Page_Load(

object

sender, EventArgs e)??{????ChineseChar chineseChar

=

new

ChineseChar(

'

'

);????Response.Write(

"

关于汉字 “孟” 的相关信息:

"

);????Response.Write(

"

  • “孟”笔画数:

    "

    +

    ChineseChar.GetStrokeNumber(

    '

    '

    ));????Response.Write(

    "

  • “孟”是否是多音字:

    "

    +

    chineseChar.IsPolyphone);????ReadOnlyCollection

    <

    string

    >

    pinyin

    =

    chineseChar.Pinyins;????Response.Write(

    "

  • “孟”所有拼音:

    "

    );????

    foreach

    (

    string

    pin

    in

    pinyin)????{??????Response.Write(pin

    +

    "

    ,

    "

    );????}????

    char

    [] ChineseChars;????Response.Write(

    "

  • 所有拼音 MENG1 的汉字

    "

    );????ChineseChars

    =

    ChineseChar.GetChars(

    "

    MENG1

    "

    );????Response.Write(

    "

    "

    +

    ChineseChars.Length.ToString()

    +

    "

    个,分别是:

    "

    );????

    for

    (

    int

    i

    =

    0

    ; i

    <

    ChineseChars.Length; i

    ++

    )????{??????Response.Write(ChineseChars[i]

    +

    "

    ,

    "

    );????}????Response.Write(

    "

  • 所有拼音 MENG2 的汉字

    "

    );????ChineseChars

    =

    ChineseChar.GetChars(

    "

    MENG2

    "

    );????Response.Write(

    "

    "

    +

    ChineseChars.Length.ToString()

    +

    "

    个,分别是:

    "

    );????

    for

    (

    int

    i

    =

    0

    ; i

    <

    ChineseChars.Length; i

    ++

    )????{??????Response.Write(ChineseChars[i]);????}????Response.Write(

    "

  • 所有拼音 MENG3 的汉字

    "

    );????ChineseChars

    =

    ChineseChar.GetChars(

    "

    MENG3

    "

    );????Response.Write(

    "

    "

    +

    ChineseChars.Length.ToString()

    +

    "

    个,分别是:

    "

    );????

    for

    (

    int

    i

    =

    0

    ; i

    <

    ChineseChars.Length; i

    ++

    )????{??????Response.Write(ChineseChars[i]);????}????Response.Write(

    "

  • 所有拼音 MENG2 的汉字

    "

    );????ChineseChars

    =

    ChineseChar.GetChars(

    "

    MENG4

    "

    );????Response.Write(

    "

    "

    +

    ChineseChars.Length.ToString()

    +

    "

    个,分别是:

    "

    );????

    for

    (

    int

    i

    =

    0

    ; i

    <

    ChineseChars.Length; i

    ++

    )????{??????Response.Write(ChineseChars[i]);????}????Response.Write(

    "

  • 所有拼音 MENG5 的汉字

    "

    );????ChineseChars

    =

    ChineseChar.GetChars(

    "

    MENG5

    "

    );????Response.Write(

    "

    "

    +

    ChineseChars.Length.ToString()

    +

    "

    个,分别是:

    "

    );????

    for

    (

    int

    i

    =

    0

    ; i

    <

    ChineseChars.Length; i

    ++

    )????{??????Response.Write(ChineseChars[i]);????}????String simText

    =

    "

    欢迎光临【孟子E章】

    "

    ;????String traText

    =

    ChineseConverter.Convert(simText, ChineseConversionDirection.SimplifiedToTraditional);????Response.Write(

    "

  • 繁简转换测试:

    "

    +

    traText);??}}

    ?

    得到的结果是:

    关于汉字 “孟” 的相关信息:

    “孟”笔画数:8 “孟”是否是多音字: True “孟”所有拼音:MENG4,MENG5,,,,,,, 所有拼音 MENG1 的汉字共4个,分别是:擝,濛,矇,蒙, 所有拼音 MENG2 的汉字 共45个,分别是:儚冡夣嫇尨幪庬懜懞掹曚朦橗檬氋氓溕濛獴甍甿盟瞢矇矒礞艨莔萌蒙蕄虻蝱鄳鄸雺霚霿靀顭饛鯍鸏鹲鼆 所有拼音 MENG3 的汉字共16个,分别是:勐幪懜懵猛瓾矇艋蒙蜢蠓錳锰鯭黽鼆 所有拼音 MENG2 的汉字共6个,分别是:夢夣孟懜梦霥 所有拼音 MENG5 的汉字共61个,分别是:儚冡勐夢夣嫇孟尨幪庬懜懞懵掹擝曚朦梦橗檬氋氓溕濛猛獴瓾甍甿盟瞢矇矒礞艋艨莔萌蒙蕄虻蜢蝱蠓鄳鄸錳锰雺霚霥霿靀顭饛鯍鯭鸏鹲黽鼆 繁简转换测试:歡迎光臨【孟子E章】

    ?

    ?不过:有几个方面主要注意:

    不清楚这个工具参照的是哪个汉字标准,SDK上也没有看到说明,“孟”这个字在字典中并不是多音字; 拼音后面的1,2,3,4,5猜测应当是声调标记:阴平,阳平,上声,去声,轻声。具体是否是有待查证;

    中文简体与中文繁体之间的转换比较简单,下面就是一个将简体转换成繁体的代码:

    ?

    C# 代码

    String simText

    =

    "

    欢迎光临【孟子E章】

    "

    ;String traText

    =

    ChineseConverter.Convert(simText, ChineseConversionDirection.SimplifiedToTraditional);Response.Write(

    "

  • 繁简转换测试:

    "

    +

    traText);

    ?

    下面是Microsoft.International.Converters.PinYinConverter.ChineseChar类的成员:

    封装了简体中文的读音和笔画等基本信息。

    成员类型成员描述?ChineseCharNew(Char)

    ChineseChar类的构造函数。

    ?ChineseCharacter

    获取这个汉字字符。

    ?CompareStrokeNumber(Char)

    将给出的字符和实例字符的笔画数进行比较。

    静态成员GetCharCount(Int16)

    检索具有指定笔画数的字符个数。

    静态成员GetChars(String)

    获取给定拼音的所有同音字。

    静态成员GetChars(Int16)

    检索具有指定笔画数的所有字符串。

    静态成员GetHomophoneCount(String)

    检索具有指定拼音的字符数。

    静态成员GetStrokeNumber(Char)

    检索指定字符的笔画数。

    ?HasSound(String)

    识别字符是否有指定的读音。

    ?IsHomophone(Char)

    识别给出的字符是否是实例字符的同音字。

    静态成员IsHomophone(Char, Char)

    识别给出的两个字符是否是同音字。

    ?IsPolyphone

    获取这个字符是否是多音字。

    静态成员IsValidChar(Char)

    识别给出的字符串是否是一个有效的汉字字符。

    静态成员IsValidPinyin(String)

    识别给出的拼音是否是一个有效的拼音字符串。

    静态成员IsValidStrokeNumber(Int16)

    识别给出的笔画数是否是一个有效的笔画数。

    ?PinyinCount

    获取这个字符的拼音个数。

    ?Pinyins

    获取这个字符的拼音。

    ?StrokeNumber

    获取这个字符的笔画数。

    ?

    其他信息请参与随机安装的chm帮助文件。

    Intel RealSense相机开发 + OpenCV + Visual Studio 配置教程

    一、Visual Studio 的安装配置工作回顾

    二、OpenCV 的下载与安装工作回顾

    三、Visual Studio 下 OpenCV 的环境配置工作回顾

    四、Visual Studio 下 Intel RealSense相机的环境配置www.sxzhongrui.com RealSense相机的 SDK 的下载www.sxzhongrui.com RealSense相机的 SDK 的安装3.Windows系统下 Intel RealSense相机的环境配置4.Visual Studio 下 Intel RealSense相机的环境配置(1)创建新项目(2)配置属性

    五、代码运行测试1.测试代码T265 相机D415 相机

    2.运行结果T265 相机D415 相机

    一、Visual Studio 的安装配置

    工作回顾

    可参考我之前的博客工作:点击此处跳转

    二、OpenCV 的下载与安装

    工作回顾

    可参考我之前的博客工作:点击此处跳转

    三、Visual Studio 下 OpenCV 的环境配置

    工作回顾

    可参考我之前的博客工作:点击此处跳转

    四、Visual Studio 下 Intel RealSense相机的环境配置

    www.sxzhongrui.com RealSense相机的 SDK 的下载

    Intel RealSense相机的 SDK 可以在 Intel 官方的 GitHub 上下载:点击此处跳转 Windows系统下,点击下载【红色框内的 win10 版本】,外网的原因,下载的速度可能会比较慢,可以复制下载链接到迅雷; 或者可以下载我上传 CSDN 的2.42.0版本:点击此处跳转 又或者可以下载我百度网盘分享的2.42.0版本:点击此处跳转百度网盘分享,提取码:qudl

    www.sxzhongrui.com RealSense相机的 SDK 的安装

    双击刚才下载的**【.exe安装程序】**,一直【Next】,最后【Install】

    安装成功之后桌面会出现这三个图标 Intel RealSense Viewer和Depth Quality Tool for Intel RealSense Cameras 可以直接被相机调用,从而显示图像,包括深度图、RGB图以及鱼眼图像等等;Examples for Intel RealSense SDK 2.0:提供了官方例程。

    3.Windows系统下 Intel RealSense相机的环境配置

    Intel RealSense相机的环境配置类似于 Visual Studio 下 OpenCV 的环境配置

    右键单击【此电脑】,点击左侧【高级系统设置】,点击【环境变量】,双击【Path】变量,点击【新建】,然后再点击【浏览】 找到C盘下的 【Intel RealSense SDK2.0】 进行添加,添加成功是这个样子 一定要逐个窗口点击确定,依次退出,否则环境没有配置上

    4.Visual Studio 下 Intel RealSense相机的环境配置

    (1)创建新项目

    参考之前的 博客:三、使用 这一部分

    (2)配置属性

    单击 visual studio 上方的【视图】,在下拉栏里找到【其他窗口】下的【属性管理器】,并点击 保证左右两侧的对应值相同 新建属性表

    包含目录的配置 双击新建的 realsense_opencv_64 属性表,点击【通用属性】,点击【VC++目录】,点击【包含目录】右侧的下拉按钮,点击【编辑】

    点击红色框内的图标,创建新的一行包含目录,点击浏览,选择 C:\Program Files (x86)\Intel RealSense SDK 2.0\include 和 C:\Program Files (x86)\Intel RealSense SDK 2.0\include\librealsense2 这2个路径进行添加 添加完路径之后,点击【确定】

    库目录的配置 双击新建的 realsense_opencv_64 属性表,点击【通用属性】,点击【VC++目录】,点击【库目录】右侧的下拉按钮,点击【编辑】

    点击红色框内的图标,创建新的一行包含目录,点击浏览,选择C:\Program Files (x86)\Intel RealSense SDK 2.0\lib\x64 路径进行添加

    附加依赖项的配置

    双击新建的 realsense_opencv_64 属性表,点击【通用属性】,点击【链接器】,点击【输入】,点击【附加依赖项】右侧的下拉按钮,点击【编辑】

    在弹出的对话框中直接手动输入 realsense2.lib,依次点击确定退出。

    五、代码运行测试

    1.测试代码

    T265 相机

    #include

    #include

    int main() {

    rs2::config cfg;// 创建一个配置信息

    cfg.enable_stream(RS2_STREAM_FISHEYE, 1, RS2_FORMAT_Y8);// Intel T265 相机进行测试

    cfg.enable_stream(RS2_STREAM_FISHEYE, 2, RS2_FORMAT_Y8);//进行使能,告诉配置信息,我需要传感器的图像frame数据

    rs2::pipeline pipe;// 声明一个realsense传感器设备

    pipe.start(cfg);

    rs2::frameset data;

    while (1) {

    data = pipe.wait_for_frames();

    rs2::frame image_left = data.get_fisheye_frame(1);

    rs2::frame image_right = data.get_fisheye_frame(2);

    if (!image_left || !image_right)

    break;

    cv::Mat cv_image_left(cv::Size(848, 800), CV_8U, (void*)image_left.get_data(), cv::Mat::AUTO_STEP);

    cv::Mat cv_image_right(cv::Size(848, 800), CV_8U, (void*)image_right.get_data(), cv::Mat::AUTO_STEP);

    cv::imshow("left", cv_image_left);

    cv::imshow("right", cv_image_right);

    cv::waitKey(1);

    }

    return 0;

    }

    D415 相机

    // License: Apache 2.0. See LICENSE file in root directory.

    // Copyright(c) 2017 Intel Corporation. All Rights Reserved.

    #include // Include RealSense Cross Platform API

    #include // Include OpenCV API

    int main(int argc, char * argv[]) try

    {

    // Declare depth colorizer for pretty visualization of depth data

    rs2::colorizer color_map;

    // Declare RealSense pipeline, encapsulating the actual device and sensors

    rs2::pipeline pipe;

    // Start streaming with default recommended configuration

    pipe.start();

    using namespace cv;

    const auto window_name = "Display Image";

    namedWindow(window_name, WINDOW_AUTOSIZE);

    while (waitKey(1) < 0 )

    {

    rs2::frameset data = pipe.wait_for_frames(); // Wait for next set of frames from the camera

    rs2::frame depth = data.get_depth_frame().apply_filter(color_map);

    // Query frame size (width and height)

    const int w = www.sxzhongrui.com().get_width();

    const int h = www.sxzhongrui.com().get_height();

    // Create OpenCV matrix of size (w,h) from the colorized depth data

    Mat image(Size(w, h), CV_8UC3, (void*)depth.get_data(), Mat::AUTO_STEP);

    // Update the window with new data

    imshow(window_name, image);

    }

    return EXIT_SUCCESS;

    }

    catch (const rs2::error & e)

    {

    std::cerr << "RealSense error calling " << e.get_failed_function() << "(" << e.get_failed_args() << "):\n " << e.what() << std::endl;

    return EXIT_FAILURE;

    }

    catch (const std::exception& e)

    {

    std::cerr << e.what() << std::endl;

    return EXIT_FAILURE;

    }

    2.运行结果

    T265 相机

    D415 相机

    将英特尔 SPMD 程序编译器(ispc)集成至 Microsoft Visual Studio

    一. 什么是ispc?

    ispc 基于一个c,它可以运行在上,但它通常提供了一个 3x 或者更多的加速,不需要编写内部代码。 ispc 还支持并行并行,使得能够编写实现性能改进的程序,这两个核心和矢量单位大小。

    在 ispc的设计中有几个关键原则:

    为C 语言构建一小组扩展,这将向性能面向对象的程序员提供优秀的性能。要在程序员和hardware–in之间提供一个细微的抽象层,要有一个执行和数据模型来理解它们的源程序。为了使它能够在没有直接写入内部的low-programmer-productivity活动的情况下,可以采用of矢量单元的计算功能。To C/C++ 应用程序代码与运行在同一服务器上的SPMD ispc 代码之间的机会explore在两种语言之间进行轻量级函数调用,并通过指针直接共享数据,不复制或者重新格式化。

    ispc 是一个带有BSD许可证的开源编译器。 它使用出色的编译基础结构用于后端代码生成和优化,并且是在github上托管的。 它支持 Windows。Mac和 Linux,同时具有x86和x86-64目标。 它目前支持 SSE2.SSE4.AVX1和AVX2指令集。

    二. 配置过程

    1.下载ispc编译器

    下载链接:http://www.sxzhongrui.com/documentation.html

    下载后即可看见我们所需的编译器文件,如下图所示:

    2.新建vs空项目,并编写简单的ispc文件

    这里的ispc测试文件,我使用了github开源仓库ispc的其中一个例子。

    simple.ispc

    export void simple(uniform float vin[], uniform float vout[],

    uniform int count) {

    foreach (index = 0 ... count) {

    // Load the appropriate input value for this program instance.

    float v = vin[index];

    // Do an arbitrary little computation, but at least make the

    // computation dependent on the value being processed

    if (v < 3.)

    v = v * v;

    else

    v = sqrt(v);

    // And write the result to the output array.

    vout[index] = v;

    }

    }

    simple.cpp

    #include

    #include

    // Include the header file that the ispc compiler generates

    #include "simple.h"

    using namespace ispc;

    int main() {

    float vin[16], vout[16];

    // Initialize input buffer

    for (int i = 0; i < 16; ++i)

    vin[i] = (float)i;

    // Call simple() function from simple.ispc file

    simple(vin, vout, 16);

    // Print results

    for (int i = 0; i < 16; ++i)

    printf("%d: simple(%f) = %f\n", i, vin[i], vout[i]);

    return 0;

    }

    3. 加入vs解决方案

    将上面的两个文件加入到解决方案

    4. 对于ispc文件配置

    对于simple.ispc,右键并点击属性

    修改的地方:

    配置属性 -> 项类型 -> 常规:自定义工具配置属性 -> 自定义生成工具 -> 常规 -> 命令行

    $(ProjectDir)\External\ispc -O2 $(ProjectDir)ispc\%(Filename).ispc -o $(ProjectDir)ispc\%(Filename).obj -h $(ProjectDir)ispc\%(Filename).h --opt=fast-math --arch=x86

    注意目录:我的ispc.exe放在了External文件夹, 我的simple.ispc放在了ispc文件夹,故我的目录是这样子,如有目录的不一样,还需要根据自己的情况进行修改

    配置属性 -> 自定义生成工具 -> 常规 -> 输出

    $(ProjectDir)ispc\%(Filename).obj

    详情见下面两张截图

    5.编译生成相应的头文件加入到解决方案

    点击运行即可,看到新增了两个文件。

    simple.h与simple.h就是通过ispc编译器生成的中间文件,后面用在simple.cpp中

    6. 成功运行

    运行结果: