openas2 搭建教程

1. 工具和安装包准备

秘钥生成工具 :链接:https://pan.baidu.com/s/1C3fnlkpu36mmpu8Y1fDnUA 密码:pg4k

 openas2  :链接:https://pan.baidu.com/s/132HSw7W7WBWxOZ_ilemOTg 密码:qp14

1. as2服务的介绍

 

 

openas2/
├── bin/                  # 存放可执行脚本的目录
│   ├── start-openas2.sh  # 启动脚本(Linux)
│   └── start-openas2.bat # 启动脚本(Windows)
├── config/               # 存放配置文件的目录
│   ├── partners.xml      # 存放合作伙伴信息的配置文件
│   ├── certificates/     # 存放证书的目录
│   └── ...               # 其他配置文件
├── logs/                 # 存放日志文件的目录
├── lib/                  # 存放依赖库的目录
└── data/                 # 存放数据的目录
    ├── pendinginfo/      # 存放待处理信息的目录
    ├── pendingmdn/       # 存放待处理MDN的目录
    └── ...               # 其他数据目录

对于OpenAS2,有一个基本的配置步骤,我将尽可能详细地进行说明:

 

   根据你的实际需求修改这些配置文件。例如,你可能需要添加新的合作伙伴、更改日志级别或者更改数据库配置等。

1. 启动

   在`bin`目录下,有两个启动脚本:`start-openas2.sh`和`start-openas2.bat`。如果你的服务器运行在Linux上,使用`sh`脚本,如果运行在Windows上,使用`bat`脚本。在命令行中运行对应的脚本即可启动OpenAS2。

2. 验证


 在你启动OpenAS2后,你可以查看`logs`目录下的日志文件来验证OpenAS2是否正常运行。你也可以通过发送AS2消息来进行测试。

 

3. 生成密钥和导入对方密钥

生成秘钥示例,以图形工具为示例,

  1.下载解压 portecle-1.9   

  2.打开portecle.jar

  

  3.生成秘钥库,及秘钥对

    3.1 点击 file --new keystore type

      

    3.2 .选择加密方式, 填写秘钥发布者信息,秘钥、加密方式想了解更多,请参考安装介绍里的其它两篇博客。

      

      

    3.3.设置别名, 注意别名需要 在配置文件中使用。

      

    3.4.把秘钥对 导出证书,发送给 “partner” ,(另一台模拟电脑)    

    

   3.5. 选择,路径,填写文件名 ,导出成功,发送给 合作伙伴,对方需要导入到秘钥库。      

      

      

    3.7.找合作伙伴索取证书 。导入到秘钥库中      

      

     

      

      

  4.将对方的证书导入到秘钥库中,并保存秘钥库,到openas2    config目录下。

     导入秘钥对成功之后,点击保存 秘钥库,选择路径。此时需要,需要设置秘钥库密码,最好与密钥对密码一致。

    

 

  注意:秘钥库、使用 p12 格式,如果.cer,或其它格式推荐转换成 p12格式

4、配置文件修改,(重点)

根据注释说明修改配置

<partnerships>
<!-- as2_id 我方的as2_id 。要告诉对接方的-->
<!--  x509_alias 生成密钥时候的名字 -->
	<partner name="MyName"
		as2_id="MyName_OID" 
		x509_alias="MyName"  
		email="as2msgs@openas2a.com"/>	 
<!-- as2_id 对接方的as2_id duijiefang 一般对方提供给你-->
<!-- x509_alias 导入对方密钥时候的名字 -->
	<partner name="duijiefang"  
		as2_id="duijiefang"  
		x509_alias="duijiefang"
		email="as2msgs@openas2b.com"/>	
 
	<partnership name="MyName-to-duijiefang">
		<sender name="MyName"/>
		<receiver name="duijiefang"/>
		<attribute name="protocol" value="as2"/>
		<attribute name="content_transfer_encoding" value="8bit"/>
		<attribute name="compression_type" value="ZLIB"/>
		<attribute name="subject" value="From MyName to duijiefang"/>
		<attribute name="mdnsubject" value="Your requested MDN response from $receiver.as2_id$"/>
		<attribute name="as2_url" value="http://对接方地址/enterprise/as2"/>
		<attribute name="as2_mdn_to" value="edi@openas2b.org"/>
		<!--signed-receipt-protocol=optional, pkcs7-signature:
        - signed-receipt-protocol: 指定MDN的签名协议,此处为可选项
        - pkcs7-signature: 使用PKCS#7格式进行MDN的签名
        signed-receipt-micalg=optional, SHA256:
        - signed-receipt-micalg: 指定MDN的消息摘要算法,此处为可选项
        - SHA256: 使用SHA-256算法计算MDN的消息摘要
		-->
		<attribute name="as2_mdn_options" value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, SHA256"/>
		<attribute name="encrypt" value="3DES"/> <!-- 加密算法:3DES -->
		<attribute name="sign" value="SHA1"/> <!-- 签名算法:SHA-1 -->
		<attribute name="resend_max_retries" value="3"/> <!-- 重新发送的最大尝试次数:3 -->
		<attribute name="prevent_canonicalization_for_mic" value="false"/> <!-- 是否允许规范化以计算消息摘要:false -->
		<attribute name="no_set_transfer_encoding_for_signing" value="false"/> <!-- 在签名过程中是否设置传输编码:false -->
		<attribute name="no_set_transfer_encoding_for_encryption" value="false"/> <!-- 在加密过程中是否设置传输编码:false -->
		<attribute name="rename_digest_to_old_name" value="false"/> <!-- 是否重命名消息摘要为旧的名称:false -->
		<attribute name="remove_cms_algorithm_protection_attrib" value="false"/> <!-- 是否删除CMS算法保护属性:false -->
	</partnership>
	<partnership name="duijiefang-to-MyName">
		<sender name="duijiefang"/>
		<receiver name="MyName"/>
		<attribute name="protocol" value="as2"/>
		<attribute name="content_transfer_encoding" value="8bit"/>
		<attribute name="subject" value="From duijiefang to MyName"/>
		<attribute name="as2_url" value="http://我方地址:10080/"/>
		<attribute name="as2_mdn_to" value="edi@openas2a.org"/>
		<attribute name="as2_mdn_options" value="signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional, SHA256"/>
		<attribute name="encrypt" value="3DES"/>
		<attribute name="sign" value="SHA256"/>
		<attribute name="prevent_canonicalization_for_mic" value="false"/>
		<attribute name="remove_cms_algorithm_protection_attrib" value="false"/>
	</partnership>
	 
	
</partnerships>

### NYU V2 数据集语义分割教程 #### 使用 NYU V2 进行语义分割的任务概述 NYU Depth V2 是一个广泛用于室内场景理解的数据集,包含了超过 140K 的 RGB-D 图像对以及详细的标注信息。该数据集中每张图片都配有深度图,并且有像素级别的类别标签,非常适合用来训练和评估语义分割模型[^1]。 对于想要利用此数据集来进行研究或开发工作的开发者来说,可以遵循如下指南来构建自己的语义分割项目: #### 准备工作环境 为了能够顺利处理 NYU V2 数据并实现高效的图像分析算法,在开始之前应当先搭建好适当的工作平台。推荐安装 Python 及其科学计算库如 NumPy 和 Pandas;同时还需要 PyTorch 或 TensorFlow 等深度学习框架支持神经网络的设计与优化过程。此外,考虑到 NYU V2 提供的是带有深度信息的彩色照片,因此 OpenCV 库也会很有帮助。 #### 获取并预处理数据 访问官方网址下载完整的 NYU V2 数据包,解压后会得到一系列文件夹结构下的原始素材。由于这些资料量较大,建议只提取所需的子集以节省存储空间。接着按照特定需求裁剪、调整大小或者增强样本质量,确保输入到后续阶段中的每一项都是最理想的形态。 ```python import os from PIL import Image import numpy as np def load_image(file_path): img = Image.open(file_path).convert('RGB') return np.array(img) data_dir = 'path/to/NYUDv2' images = [] labels = [] for root, dirs, files in os.walk(data_dir): for file_name in files: if file_name.endswith('.jpg'): images.append(load_image(os.path.join(root, file_name))) elif file_name.endswith('_label.png'): labels.append(load_image(os.path.join(root, file_name))) print(f'Loaded {len(images)} images and {len(labels)} label maps.') ``` #### 构建卷积神经网络架构 基于先前准备好的材料,现在可以着手设计适合解决当前问题类型的 CNN 模型了。这里可以选择经典的 U-Net 结构作为基础模板,它通过跳跃连接机制有效地融合多尺度特征表示,从而提高最终预测精度。当然也可以尝试其他先进的设计方案比如 DeepLab v3+ 来获得更好的性能表现。 ```python import torch.nn as nn import torchvision.models as models class UNet(nn.Module): def __init__(self, num_classes=40): # Adjust based on the number of classes in your task. super(UNet, self).__init__() base_model = models.resnet50(pretrained=True) layers = list(base_model.children()) encoder = nn.Sequential(*layers[:8]) decoder_blocks = [ nn.ConvTranspose2d(2048, 1024, kernel_size=(2, 2), stride=(2, 2)), ... ] self.decoder = nn.Sequential(*decoder_blocks) self.classifier = nn.Conv2d(in_channels=64, out_channels=num_classes, kernel_size=(1, 1)) def forward(self, x): encoded_features = self.encoder(x) decoded_output = self.decoder(encoded_features) output = self.classifier(decoded_output) return output ``` #### 训练与验证流程设置 完成上述步骤之后便进入了最关键的环节——即让计算机学会如何区分不同种类的对象。这通常涉及到定义损失函数(例如交叉熵)、选择合适的优化器(Adam),并且合理安排迭代次数以便充分挖掘潜在规律而不至于过拟合现象发生。期间务必定期保存最佳参数组合方便后期测试调用。 ```python device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = UNet().to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) num_epochs = epochs_number best_val_loss = float('inf') for epoch in range(num_epochs): train_loss = 0.0 model.train() for inputs, targets in dataloader_train: optimizer.zero_grad() outputs = model(inputs.to(device)) loss = criterion(outputs, targets.long().to(device)) loss.backward() optimizer.step() train_loss += loss.item() avg_train_loss = train_loss / len(dataloader_train.dataset) val_loss = evaluate_on_validation_set(model=model, validation_loader=dataloader_valid, device=device, criterion=criterion) print(f'\nEpoch [{epoch}/{epochs}], Train Loss: {avg_train_loss:.4f}, Val Loss: {val_loss:.4f}') if val_loss < best_val_loss: save_checkpoint({ 'state_dict': model.state_dict(), }, filename='unet_best.pth.tar') best_val_loss = val_loss ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰点.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值