----------------------------------------------------------------------- -- An example of Actor Prolog program. -- -- (c) 2014 IRE RAS Alexei A. Morozov -- ----------------------------------------------------------------------- -- pragma: INTERMEDIATE_SOURCE_CODE = JDK; pragma: USE_COMPILER_INSTEAD_OF_PROVER = ON; -- import .. from "morozov/Java2D"; import .. from "morozov/Vision"; -- DOMAINS: -- reference: -- ItemList = STRING; ItemList*. YesNoUnknown = 'yes'; 'no'; 'unknown'. -- ground: -- GraphAnalysisMethod = 'off'; 'method_one'; 'method_two'. IsAnomalous = 'yes'; 'no'. -- DepthOfSearch = INTEGER. -- ----------------------------------------------------------------------- interface 'Main' (specialized 'Alpha'): -- constant: -- inverse_transformation_matrix : TransformationMatrix; sampling_rate : REAL; -- stage_one : 'ImagePreprocessor'; stage_two : 'ImageAnalyser'; -- internal: -- low_level_analyzer : 'ImageSubtractor'; -- [ ] ----------------------------------------------------------------------- interface 'ImagePreprocessor' (specialized 'Timer'): -- constant: -- sampling_rate : REAL; -- low_level_analyzer : 'ImageSubtractor'; stage_two : 'ImageAnalyser'; -- internal: -- subtractor : 'ImageSubtractor'; text : 'Text'; image : 'BufferedImage'; state : 'ProgramState'; -- [ PREDICATES: -- imperative: -- set_target_data_directry(STRING,STRING) - (i,i); -- load_figure(INTEGER,INTEGER) - (i,i); ] ----------------------------------------------------------------------- interface 'ImageAnalyser' (specialized 'Dialog'): -- constant: -- low_level_analyzer : 'ImageSubtractor'; preprocessor : 'ImagePreprocessor'; -- walking_speed_threshold_value : REAL; walking_speed_threshold_halfwidth : REAL; running_speed_threshold_value : REAL; running_speed_threshold_halfwidth : REAL; movement_duration_threshold_value : REAL; movement_duration_threshold_halfwidth : REAL; -- velocity_bound_1 : REAL; velocity_bound_2 : REAL; velocity_bound_3 : REAL; velocity_bound_4 : REAL; velocity_bound_5 : REAL; velocity_bound_6 : REAL; velocity_bound_7 : REAL; velocity_bound_8 : REAL; -- velocity_color_1 : Color; velocity_color_2 : Color; velocity_color_3 : Color; velocity_color_4 : Color; velocity_color_5 : Color; velocity_color_6 : Color; velocity_color_7 : Color; velocity_color_8 : Color; velocity_color_9 : Color; -- maximal_depth_of_search : DepthOfSearch; -- sampling_rate : REAL; circle_radius : REAL; -- internal: -- subtractor : 'SynchronizedImageSubtractor'; graphic_window : 'Canvas2D'; prompt_window : 'Report'; text : 'Text'; image : 'BufferedImage'; timer : 'Timer'; con : 'Console'; files : 'File'; -- variable: -- target_image : ItemList; target_objects : ItemList; -- [ PREDICATES: -- imperative: -- draw_scene; draw_target_image(ItemList) - (i); draw_target_objects(ItemList,FrameNumber) - (i,i); -- draw_blobs(PointX,PointY,BlobList) - (i,i,i); draw_blob(PointX,PointY,Blob) - (i,i,i); -- draw_blob_identifier( PointX, PointY, PointX, PointY, INTEGER) - (i,i,i,i,i); -- draw_tracks(PointX,PointY,TrackList) - (i,i,i); draw_track(PointX,PointY,Track) - (i,i,i); -- draw_track_segments( PointX, PointY, INTEGER, TrackSegmentList) - (i,i,i,i); draw_track_segment( PointX, PointY, INTEGER, TrackSegment) - (i,i,i,i); -- draw_circle(PointX,PointY) - (i,i); -- draw_track_identifier( PointX, PointY, PointX, PointY, INTEGER) - (i,i,i,i,i); -- draw_graphs( PointX, PointY, GraphList, INTEGER, GraphAnalysisMethod, FrameNumber) - (i,i,i,i,i,i); -- determ: -- do_analyse_graph(GraphAnalysisMethod) - (i); -- is_a_kind_of_a_lam( GraphAnalysisMethod, ConnectedGraph, INTEGER, ConnectedGraph, ConnectedGraphEdge, EdgeNumber, ConnectedGraphEdge, EdgeNumber, ConnectedGraphEdge, EdgeNumber) - (i,i,i,i,o,o,o,o,o,o); contains_a_running_person( EdgeNumbers, ConnectedGraph, EdgeNumbers, ConnectedGraphEdge, REAL, REAL, EdgeNumber, EdgeNumber, DepthOfSearch) - (i,i,i,o,o,o,i,o,i); is_a_running_person( ConnectedGraphEdge, ConnectedGraph, EdgeNumbers, ConnectedGraphEdge, REAL, REAL, EdgeNumber, EdgeNumber, DepthOfSearch) - (i,i,i,o,o,o,i,o,i); contains_a_walking_person( EdgeNumbers, ConnectedGraph, EdgeNumbers, ConnectedGraphEdge, REAL, REAL, EdgeNumber, EdgeNumber, DepthOfSearch) - (i,i,i,o,o,o,i,o,i); is_a_walking_person( ConnectedGraphEdge, ConnectedGraph, EdgeNumbers, ConnectedGraphEdge, REAL, REAL, EdgeNumber, EdgeNumber, DepthOfSearch) - (i,i,i,o,o,o,i,o,i); is_a_meeting( EdgeNumbers, ConnectedGraph, EdgeNumbers, ConnectedGraphEdge, EdgeNumber, ConnectedGraphEdge, EdgeNumber, DepthOfSearch) - (i,i,i,i,i,o,o,i); -- is_not_element( EdgeNumber, EdgeNumbers) - (i,i); -- imperative: -- fuzzy_metrics(REAL,REAL,REAL) = REAL - (i,i,i); -- imperative: -- draw_graph( PointX, PointY, ConnectedGraph, ConnectedGraph, IsAnomalous, GraphAnalysisMethod, INTEGER, FrameNumber) - (i,i,i,i,i,i,i,i); -- draw_edge( PointX, PointY, ConnectedGraphEdge, ConnectedGraph, IsAnomalous, GraphAnalysisMethod, INTEGER, FrameNumber) - (i,i,i,i,i,i,i,i); -- draw_graph_identifier( GraphAnalysisMethod, PointX, PointY, PointX, PointY, INTEGER) - (i,i,i,i,i,i); -- draw_origins( PointX, PointY, PointX, PointY, EdgeNumbers, ConnectedGraph) - (i,i,i,i,i,i); draw_origin( PointX, PointY, PointX, PointY, EdgeNumber, ConnectedGraph) - (i,i,i,i,i,i); draw_origin_arrow( PointX, PointY, PointX, PointY, PointX, PointY) - (i,i,i,i,i,i); -- determ: -- get_edge( INTEGER, ConnectedGraph, ConnectedGraphEdge) - (i,i,o); -- imperative: -- draw_track_of_blobs( PointX, PointY, TrackOfBlob, IsAnomalous, REAL) - (i,i,i,i,i); draw_track_of_blobs( PointX, PointY, PointX, PointY, TrackOfBlob, IsAnomalous, REAL) - (i,i,i,i,i,i,i); -- select_line_color (IsAnomalous,REAL,Color,INTEGER) - (i,i,o,o); select_line_color(REAL,Color) - (i,o); -- draw_rectangle( IsAnomalous, EdgeNumbers, TrackOfBlob, PointX, PointY, FrameNumber) - (i,i,i,i,i,i); draw_colored_rectangle( TrackOfBlob, PointX, PointY, FrameNumber, Color, INTEGER) - (i,i,i,i,i,i); -- restore_settings; ynu2yn(YesNoUnknown,YesNo) - (i,o); -- switch_background_gaussian_filter_radius(YesNo) - (i); switch_background_median_filter_threshold(YesNo) - (i); switch_velocity_median_filter_halfwidth(YesNo) - (i); switch_fuzzy_thresholds(YesNo) - (i); -- dump_graphs(ItemList,GraphList) - (i,i); dump_graphs(GraphAnalysisMethod,GraphList,INTEGER) - (i,i,i); -- report_obtained_edges( GraphAnalysisMethod, EdgeNumber, EdgeNumber, EdgeNumber) - (i,i,i,i); -- dump_graph( ConnectedGraph, ConnectedGraph, INTEGER) - (i,i,i); -- check_edge(ConnectedGraphEdge,ConnectedGraph) - (i,i); report_metrics_value(REAL,Color,Color) - (i,i,i); dump_edge(ConnectedGraphEdge) - (i); -- draw_legend; -- report_time(FrameNumber) - (i); -- PREDICATES: -- imperative: -- '+'(PointX,PointX) = PointX - (i,i); '+'(PointY,PointY) = PointY - (i,i); '-'(PointX,PointX) = PointX - (i,i); '-'(PointY,PointY) = PointY - (i,i); '/'(PointX,PointX) = PointX - (i,i); '/'(PointY,PointY) = PointY - (i,i); ] ----------------------------------------------------------------------- interface 'ProgramState' (specialized 'Database'): [ DOMAINS: -- Target = current_directory(STRING,STRING); beginning_time(INTEGER); current_frame(INTEGER). -- PREDICATES: -- determ: -- get_target_directory(STRING,STRING) - (o,o); get_beginning_time(INTEGER) - (o); get_current_frame(INTEGER) - (o); -- imperative: -- set_target_directory(STRING,STRING) - (i,i); set_beginning_time(INTEGER) - (i); set_current_frame(INTEGER) - (i); ] ----------------------------------------------------------------------- |