Giter Site home page Giter Site logo

blueverdant / qinjianpu Goto Github PK

View Code? Open in Web Editor NEW

This project forked from colennn/qinjianpu

0.0 0.0 0.0 60.99 MB

🎵简谱编辑器+论坛。想实现一个既可以创建简谱,又能分享的曲谱社区。

License: MIT License

Java 23.74% HTML 0.78% CSS 0.68% JavaScript 74.51% Yacc 0.30%

qinjianpu's Introduction

QinJianPu

​ 轻简谱总体思路就是 简谱编辑器+论坛。想实现一个既可以创建简谱,又能分享的曲谱社区。

轻简谱具有以下功能:

  1. 简谱制谱,可实现在页中的完成简谱的制作和修改
  2. 简谱播放,可播放曲谱上的内容。
  3. 图像识别,用户上传简谱谱例便可生成可供播放的格式以及可供修改的格式。
  4. 论坛功能,提供用户论坛的谱例上传、曲谱修改、曲谱评论,曲谱管理。
  5. 后台管理,系统管理员可在后台实现启用、禁用用户登录、曲谱管理、评论管理以及分类管理。

使用技术

OpenCV 3.3.0 + Tess4J 4.0 简谱识别 基于CodeMirror.js代码编辑器框架 简谱论坛、后台管理 :基于J2EE snap.svg矢量图操作框架的简谱制谱工具

系统界面

首页,可以查看论坛当中分享的曲谱

曲谱编辑页面,可创建曲谱,带有图像识别、曲谱编辑、曲谱播放等功能

查看曲谱功能,一般用于游客

曲谱识别的界面

后台管理界面1

后台管理界面2

图像识别原理及部分代码

public static List<Mat> horizontalProjection(Mat inputMat) {
		int height = inputMat.height();// 图片的高度
		int width = inputMat.width();// 长度
		double[] pixelValue = null;// 获取的每个像素值
		int[] projectValArry = new int[height];// 存储每行的像素量
		// 如果该行有255像素的像素点,则记录下来ֵ
		for (int row = 0; row < height; row++) {
			for (int col = 0; col < width; col++) {
				pixelValue = inputMat.get(row, col);
				if (pixelValue[0] != 0)// 没有则跳过
					projectValArry[row]++;}}
		// 按照上面的得出的行信息绘制出每行的框框
		pixelValue[0] = 255; // 像素点为255
		Mat dst = new Mat(height, width, CvType.CV_8UC1);
		for (int row = 0; row < height; row++) {
			for (int col = 0; col < projectValArry[row]; col++) {
				dst.put(row, col, pixelValue[0]);}}
		// 按行切割
		List<Mat> rowsImgsList = new ArrayList();
		Mat rowsImg = null;
		int rowsNum = 0;
		Scalar color = new Scalar(255, 0, 0);
		// 获取每行的top,bottom
		for (int row = 0; row < height; row++) {
			pixelValue = dst.get(row, 0);
			if (pixelValue[0] != 0) {
				int top = row;
				// System.out.println("top:" + row);
				for (row = top; row < height; row++) {
					pixelValue = dst.get(row, 0);
					if (pixelValue[0] == 0) {
						// 获得底部
						int bottom = row;
						Imgproc.rectangle(dst, new Point(0, top), new Point(width, bottom), color);
						Rect rect = new Rect(0, top, width, bottom - top);// 得出rect
						rowsImg = new Mat(inputMat, rect);// 单行
						rowsImgsList.add(rowsNum, rowsImg);// 存入集合中
						rowsNum++;
						break;}
                }
            }
        }
		return rowsImgsList;
}

因为对自己的识别率不是很满意所以用了jTess来手动提高识别率。😂

参考链接

CodeMirror.js代码编辑器框架文档

Snap.js 对于Svg矢量图进行对象操作的js框架

MIDI.js 乐器播放开源js框架

OpenCV Java documentation (3.4.1) 图像识别Java文档

Tess4J 基于Java的文字识别开源库文档

百度OCR文字识别API文档

感谢支持😘

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.