Real-time Audio Surveillance System for PTZ Camera

You can download my paper at Real-time Audio Surveillance System for PTZ  Camera

In this paper, we propose an audio surveillance system to detect and localize dangerous sound in real-time so as to be able to direct a PTZ camera to catch a snapshot image about the location of sound source instantly. The proposed audio surveillance system firstly detects foreground sound based on adaptive Gaussian mixture background sound model, and classifies it into one of pre-trained classes of foreground sounds based on GMM model. Next, it decides whether it belongs to dangerous class group or not. If it does, then a sound source localization algorithm based on Dual delay-line algorithm is applied to localize the sound source. Finally, the proposed system uses the sound source location information to pan and tilt the PTZ camera towards the orientation of the dangerous sound source, and take a snapshot against over the sound source region. Experiment results show that the proposed system can detect foreground sound stably and recognize dangerous sounds with a precision of 79% while the sound source localization can estimate orientation of the sound source with acceptably small error.

Keywords— sound classification; sound source localization; AGMM; PTZ camera; dual line-delay; small baseline SSL

 

any further information please send email at quocnv@ssu.ac.kr

Read Audio Sample

/*
============================================================================
Name        : Trainingtool.c
Author      : Panda
Version     :
Copyright   : ERC Laboratory
Description : Hello World in C, Ansi-style
============================================================================
*/

#include <stdio.h>
#include <stdlib.h>
#include "SPTK.h"

#define samplerate 16000
#define mf_c_length 2048 //30ms
#define f_low 10
#define f_high 6800
#define mf_c_M 16
#define mf_c_N 12
#define mf_c_L 22
#define mf_c_lift 0.97f

#define mf_shift  160

double *readfilewav(char *filepath,long *numsample)
{
    long numofsam;
    FILE *fpi, *fpo;
    fpi = getfp(filepath, "rb");
    fseek(fpi, 0, SEEK_END);
    long file_size = ftell(fpi);
    file_size = file_size – 44;
    numofsam = (file_size /2)/sizeof(short);
    printf(" file size %d\n",file_size);

    double *data;
    data = (double*) malloc(sizeof(double)*numofsam);
    fclose(fpi);

    fpo = getfp(filepath, "rb");
    char tmp;
    int i;
    int channel;
    for(i =0;i<44;i++)
    {
        fread(&tmp,1,1,fpo);
    }

    short sam;
    for(i =0;i<numofsam;i++)
    {
        fread(&sam,sizeof(short),1,fpo);
        data[i]=(double)(sam)/32767.0f;
        //printf("%f \n",data[i]);
        fread(&sam,sizeof(short),1,fpo);
        //printf("%f\n",(double)((int)sam/32768.0f));
    }
    fclose(fpo);
    *numsample = numofsam;
    return data;
}

int main(void) {

    puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
    double *data;
    long numofsam;
    data = readfilewav("/root/Desktop/testssl.wav",&numofsam);
    //——————————————————————————————————————————————————————–
    int j;
    j=0;

    printf("%f \t ",data[0]);
    printf("%f \t ",data[1]);
    printf("%f \t ",data[2]);
    printf("%f \t ",data[3]);

    while (j+mf_c_length<numofsam)
    {

//        mfcc(&(data[j]),CC[i],samplerate,mf_c_lift,1.0f,mf_c_length,mf_c_length,mf_c_N,mf_c_M,mf_c_L,0,1);
        j=j+mf_shift;
    }
    return 1;
}

Categories: Quick Code

Một số các điểm chú ý trong Simulator

June 10, 2011 4 comments

Ở bài viết trước mình đã giới thiệu cách để tạo ra 1 không gian 3D với 1 mặt trời, 1 nền và 1 bầu trời. Ở bài viết này mình sẽ giới thiệu về Simulator :

1/Khởi động Simulator :

Cách đơn giản Open-mouthed smile : nhất để khởi động Simulator là Open-mouthed smile vào start menu –>chọn Microsoft Robotics Development Studio –> Chon Visual Simulation Environment . ở menu này bạn sẽ thấy rất nhiều Scenarios đã có sẵn như : KuKa LBR3 ARm , Lego NXT TriBot Simulation ,….

image

Ngoài ra có thể khởi động bằng file Manifest :

Bạn sử dụng DSS command Prompt ( bạn có thể nhìn thấy nó trong menu ở hình trên ), sau đó gõ lệnh :

dsshost –p:50000 –t:50001 –m:”Samples\config\simulationtutorTutorial11.manifest.xml”

trong đó :”Samples\config\simulationtutorTutorial11.manifest.xml” là đường dẫn của file manifest.

Dưới đây là 1 số screen của Simulator và scenario của nó :

image

image

2/ Di chuyển và chỉnh hướng trong Simulation Environment :

Hãy tưởng tượng rằng bạn đang chơi Counter Strike và… cứ tiếp tục chơi đi nhé Smile. Bạn dùng các phàm WASD để di chuyển ( di chuyển camera ) và dùng chuột trái để chỉnh hường . Bạn Hãy click giữ chuột vào màn hình của Simulator sau đó rê chuột … bạn sẽ biết ngay là hướng đang thay đổi Smile

3/ Một số phím chức năng của Simulator :

F2 : Thay đổi kiểu Render.

F3 : Bật tắt Engine Vật lí , khi tắt engine này thì các hiện tượng vật lí cơ bản tro’ng Environment sẽ không còn tác dụng nữa.

F5 : Chuyển đổi giữa 2 chế độ edit và run ( cái này giống như đồng hồ ngưng đọng thời gian của Doraemon nè Open-mouthed smile , ngoài đời mà có 2 chế độ này thì hay quá Winking smile )

4/ Sửa đổi Simulation :

Bạn chuyển simulator qua chế đội Edit đi rồi mình nói tiếp nhé ; ( phím F5 Open-mouthed smile )

image

Các bạn có thể chọn Entity ở bên và đặt lại các thuộc tính cho nó bằng cách  :

image

 

Sẽ xuất hiện bảng thuộc tính của Entity như sau :

image

Rồi , h thì bạn cứ vọc các bảng thuộc tính đó nhé Open-mouthed smile (mình sẽ nói khái quát các thuộc tính ấy sau)

À quên để biết bạn đã chọn Entity nào thì sau khi chọn Entity bạn hãy nhấn và giữ phím Ctrl, Entity bạn chọn sẽ sáng lên như hình dưới

image

Để tạo 1 entity mới bạn chon Entity –> new :

và sẽ xuất hiện 1 bảng như bên dưới

image

Mỗi thực thể trong environment , để phân biệt với các thực thể khác thì nó phải “cần 1 một cái tên”. Ngoài tên ra thì ta cần phải cho Environment biết đó là loại gì .

Simulator hỗ trợ chúng ta làm 1 việc rất hay đó là “Entity con” (child entity) . Các entity con này có quan hệ với …entity ba mẹ của chúng,hic. Ví dụ nhé : nếu bạn khai báo 1 SingleShapeEntity này là con của 1 SingleShapeEntity khác ta sẽ tạo ra 1 khớp nối giữa 2 mảnh . Khi bạn thay đổi vị trí của 1 Entity cha mẹ thì các entity con sẽ di chuyển cùng với nó.( Chắc cái này mình sẽ ví dụ sau Open-mouthed smile )

 

5/ Sửa đổi Entity State :

Sau khi chọn sửa đổi entity như sau :

image

Xuất hiện 1 cửa sổ với các tính chất của entity , ta chọ EntityState

image

Sẽ xuất hiện bảng như bên dưới gồm các thuộc tính State ( trạng thái ) của Entity :

image

Các Entity trong environment là kế thừa từ 1 lớp entity chung . Mỗi entity đều có 1 thuộc tính entity state , thuộc tính này quy định đến cách tồn tại của Entity trong environment ví dụ như tên ,màu sắc ,… Thành phần State trong 1 entity là thuộc tính EntityState :

Một số thuộc tinh state đó là :

a/ Graphic Assets :

      GraphicAssets mô tả cách mà Entity được nhìn thấy . Qui định trong các thành phần: DefaultTexture, Effect, Mesh :

DefaultTexture : Nếu không có mesh, mesh sẽ được tự động sinh ra từ các physics shape.Trong trường hợp đó, DefaultTexture mô tả Bản đồ texture để gán lên mesh.

Effect : Bao gồm các chương trình Shader  dùng để render các entity. Trong hầu hết các trường hợp người ta dùng chương trình sharder mặc định : SimpleVisualize.fx .

Mesh : 1 entity chỉ được dùng 1 file mesh . Trường hợp không có file mesh thì file mesh mặc định sẽ được tạo ra từ  Physics Shape ( các hình khối vật lí của Entity )

 

b/Misc :

  •     Flags : Cờ hiệu ( chà , không biết dịch làm sao hết ) nó đánh dấu 1 số tính câất được thiết lập của State như :
    • Kinematic : nếu cờ hiệu này được đánh dấu nghĩa là Vị trí (position) vủa entity và hướng ( orientation) của nó được điều khiển bởi 1 chương trình bên ngoài , nó không bị điều khiển bởi engine vật lí như là chịu tác dụng của trọng lược hay thay đổi vị trí khi va chạm ( ví dụ như bức tường , núi , đồi ,…)
    • IngoreGravity : nếu flags này được dựng lên thì có nghĩa là Engine Vật lí  ( Physisc  ) sẽ không tác dụng trọng lực lên Entity này
    • DisableRotationX,DisableRotationY,DisableRotationZ : khi cờ này được dựng lên có nghĩa là entiy không được quay quanh các trục tương ứng. nó chỉ có tác dụng với kinematic = true.
    • name : Tên của entity ( cái này là bắt buộc )
    • Velocity : Vector giữ thông tin về hướng và độ lớn của vận tốc của Entity. Nó được update liên tục giống như vị trí và goc quay của entity

c/Các tính chất vật lí :

  • AngularDamping/LinearDamping : hệ số Suy Giảm ( Damping) cung cấp mức độ tạo các hiệu ứng như ma sát với không khí ,….
  • Mass,Density : Khối lượng , và khối lượng riêng của entity.

Còn 1 số tình chất nữa của Entity – ta sẽ tìm hiểu qua Tuturials ở các bài viết sau .

Cảm ơn các bạn ^^

Categories: Robotics

Tạo 1 Simulation Đơn giản với MRDS ( Microsoft Robotics Development Studio )

June 8, 2011 2 comments

Trong Điều kiện thực tế – đối với sinh viên Việt Nam khi nghiên cứu robot thì vật cản lớn nhất có lẽ thiết bị.

Rất may, MRDS đã hỗ cho chúng ta điều đó , Simulation Engine của  MRDS cho phép chúng ta chạy thử những robot như thật trong môi trường Simulation.

I/ The MRDS Visual Simulation Enviroment :

Visual Simulation Environment (VSE) là 1 phần của MRDS, giúp chúng ta dựng lên 1 không gian ảo 3d với đầy đủ tính chất vật lí như 1 không gian thực.

VSE được viết trên nền XNA do đó khi chạy VSE ta cần phải có các DLL của XNA.

image

Giao diện của  VSE

VSE chạy như 1  Service node, ta có thể điều khiển service này thông qua các service tự tạo hoặc Các Service Sample khi đi kèm của VSE. ( Giao thức DSSP được dùng để giao tiếp giữa các service này)

II/Tạo 1 Simulation đơn giản :

1/Các thư viện cần dùng :

a/ RoboticCommon.dll :

Cung cấp các kiểu dữ liệu chung – Như 1 số kiểu ta sẽ dùng ở ví dụ này như :

– Vector2 , Vector3,Vector4 : Cung cấp các kiểu dữ liệu gồm các bộ 2 , 3 ,4 các số float . Các bộ này dùng để biểu diễn các điểm trên các hệ tọa độ 2d, 3d và thỉnh thoảng dùng để biểu diễn màu.

-Pose : Mô tả Vị trí và hướng của 1 vật thể trong VSE

-Matrix: 1 mảng 4 x 4 các phần tử float .

-ColorValue : chứa 4 số float dùng để biểu diễn màu

b/ SimulationCommon.dll :

Bao gồm các kiểu dữ liệu được dùng trong VSE:

-Entity : Lớp cơ sở để biểu diễn các thực thể trong VSE.

-State : Chứa 1 số thông tin của Entity như name , pose,…

-PhysicsEntity : Class biểu diễn mối liên hệ giữa Entity và physic engine

c/PhysicsEngine.dll :

2/ Các bước tạo Simulation:

-Tạo 1 project mới :

image

Add thêm 1 số thư viện dll giới thiệu ở trên . Bạn có thể dễ dàng tìm thấy file dll này ở trong thư mục “bin” trong thư mục cài MRDS

image

Ta mở file Corobot.CS như trên.

Thêm 1 số thư viện như sau vào file Corobot.cs

using submgr = Microsoft.Dss.Services.SubscriptionManager;
using engine = Microsoft.Robotics.Simulation.Engine.Proxy;
using Microsoft.Robotics.PhysicalModel;
using Microsoft.Robotics.Simulation;
using Microsoft.Robotics.Simulation.Physics;
using Microsoft.Robotics.Simulation.Engine;
using engineproxy = Microsoft.Robotics.Simulation.Engine.Proxy;
using xna = Microsoft.Xna.Framework;
using xnagefx = Microsoft.Xna.Framework.Graphics;

image

 

Để chạy được Simulation ta phải chạy service “Simulation Engine” . Để làm được điều này ta phải khai báo [Partner] của Simulation ta đang viết với  “Simulation Engine”.

[Partner("SimulationEngine", Contract = engine.Contract.Identifier,
           CreationPolicy = PartnerCreationPolicy.UseExistingOrCreate)]
       engine.SimulationEnginePort _simulationEnginePort = new engine.SimulationEnginePort();

image
Ta tìm đến method Start() và thêm vào xuống dưới :

CameraView camera= new CameraView(); // Tạo 1 camera
camera.LookAtPoint = new Vector3(0, 0, 0); //Đặt vị trí cho camera
camera.EyePosition = new Vector3(3, 3, 3);// Hướng nhìn của Camera
SimulationEngine.GlobalInstancePort.Update(camera); //Gửicamera         

                                                                                                                   //đến“SimulationEngine”

SkyDomeEntity sky = new SkyDomeEntity("skydome.dds", "sky_diff.dds");//tạo thực

                                                                                                                                                          //trờithể bầu
SimulationEngine.GlobalInstancePort.Insert(sky);// Thêm vào SimulationEngine

 

 

HeightFieldEntity Grownth = new HeightFieldEntity("Ground","WoodFloor.dds",new MaterialProperties("GroundMaterial",0.1f,0.5f,0.5f)); // Tạo mặt đất và tính chất của nó
SimulationEngine.GlobalInstancePort.Insert(Grownth);//thêm vào SimulationEngine

 

LightSourceEntity sun = new LightSourceEntity(LightSourceEntityType.Directional);
sun.State.Name = "MatTroi";
SimulationEngine.GlobalInstancePort.Insert(sun);

//Tương tự : tạo mặt trời ( nguồn sáng cho Engine)

image
Và chỉ còn lại 1 thao tác đơn giản là bấm f5 để chạy mà thôi . bạn hãy kiên nhẫn chờ nhé Open-mouthed smile

image

Bạn hãy nhấn và giữ chuột trái để tham quan không gian mình mới tạo ra như như chơi Counter Strike ấy Open-mouthed smile

Sẵn tiện bạn hãy vọc lun mấy cái menu và chức năng của nó để chờ bài sau : Cách đưa 1 robot vào Simulation

^^

Categories: Robotics