sensible-cinema 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README +8 -4
- data/VERSION +1 -1
- data/lib/ocr.rb +9 -15
- data/spec/ocr.spec.orb +4 -0
- data/spec/overlayer.spec.rb +7 -1
- data/spec/screen_tracker.spec.rb +3 -5
- data/zamples/scene_lists/example_scene_list.yml +11 -10
- data/zamples/scene_lists/star_trek_generations.yml +6 -5
- metadata +2 -2
data/README
CHANGED
@@ -40,7 +40,7 @@ Next install the gem by either opening up the command window or hitting windows+
|
|
40
40
|
C:\> jruby -S gem install sensible-cinema
|
41
41
|
|
42
42
|
it's jruby only currently (since jruby allows for proper thread concurrency, has an easy GUI, and feels actually sane on windows).
|
43
|
-
It could theoretically be ported to MRI 1.9.
|
43
|
+
It could theoretically be ported to MRI 1.9.2, if anybody wanted to do so.
|
44
44
|
Also if anybody would be interested in porting this to Linux I'd be happy to collaborate.
|
45
45
|
|
46
46
|
You can test that it's installed by running it (see above) and selecting the "example_scene_list.yml", and
|
@@ -48,9 +48,9 @@ choosing the hulu player.
|
|
48
48
|
|
49
49
|
It will proceed do a few "demo" mutes and blank outs.
|
50
50
|
|
51
|
-
== How to
|
51
|
+
== How to Program ==
|
52
52
|
|
53
|
-
To
|
53
|
+
To program sensible-cinema to play what you'd like, first "preview" the on-computer movie you'd like to create a scene-list for.
|
54
54
|
As questionable scenes occur, jot down their start and end times somewhere.
|
55
55
|
Then create an Edit Decision List (EDL) file that looks like this:
|
56
56
|
|
@@ -95,13 +95,17 @@ A. Not yet. Well maybe. Currently you'll either need to attach your computer to
|
|
95
95
|
Q. What movies are available to watch online?
|
96
96
|
|
97
97
|
A. Not many are available free (hulu, youtube have a few), but Netflix has quite a few. Plus you can watch your DVD's
|
98
|
-
on your computer monitor.
|
98
|
+
on your computer monitor, or rent or borrow them.
|
99
99
|
|
100
100
|
Q. Why does my mouse bounce up and down while this thing is playing?
|
101
101
|
|
102
102
|
A. This enables you to keep your on screen tracker visible, which allows sensible-cinema to track where you're at.
|
103
103
|
Message me if this bugs you too much and we'll see what we can do for it.
|
104
104
|
|
105
|
+
Q. Why does it seem really laggy at screen detection at the beginning?
|
106
|
+
|
107
|
+
A. It takes it awhile to warm up. Ping me if you want this fixed.
|
108
|
+
|
105
109
|
== Thanks ==
|
106
110
|
|
107
111
|
Thanks to Jarmo for the win32-screenshot gem, and the mini_magick gem authors, jruby guys, etc.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.2
|
data/lib/ocr.rb
CHANGED
@@ -2,12 +2,11 @@ im_path = File.expand_path(File.dirname(__FILE__) + "/../vendor/imagemagick") #
|
|
2
2
|
ENV['PATH'] = im_path + ';' + ENV['PATH']
|
3
3
|
|
4
4
|
require 'mini_magick'
|
5
|
-
require 'open3'
|
6
5
|
|
7
6
|
# helper for OCR'ing single digits that were screen captured
|
8
7
|
module OCR
|
9
8
|
|
10
|
-
GOCR = File.expand_path(File.dirname(__FILE__) + "/../vendor/gocr048.exe -C 0-9:/ ")
|
9
|
+
GOCR = File.expand_path(File.dirname(__FILE__) + "/../vendor/gocr048.exe -C 0-9:/S ")
|
11
10
|
|
12
11
|
CACHE = {}
|
13
12
|
|
@@ -15,31 +14,26 @@ module OCR
|
|
15
14
|
def identify_digit memory_bitmap, options = {}
|
16
15
|
if CACHE[memory_bitmap]
|
17
16
|
return CACHE[memory_bitmap]
|
18
|
-
else
|
19
17
|
end
|
20
|
-
|
21
|
-
should_invert = options[:should_invert]
|
22
|
-
if might_be_colon
|
18
|
+
if options[:might_be_colon]
|
23
19
|
# do processing in-line <sigh>
|
24
20
|
total = (memory_bitmap.scan /\x00{5}+/).length
|
25
21
|
if total >= 3 # really should be 4 for VLC
|
26
|
-
# it had some
|
22
|
+
# it had some darkness...therefore have been a colon!
|
23
|
+
CACHE[memory_bitmap] = ":"
|
24
|
+
return ":"
|
27
25
|
end
|
28
|
-
CACHE[memory_bitmap] = ":"
|
29
|
-
return ":"
|
30
26
|
end
|
31
27
|
image = MiniMagick::Image.from_blob(memory_bitmap)
|
32
28
|
image.format(:pnm) # expensive, requires convert.exe in path...
|
33
|
-
if should_invert
|
29
|
+
if options[:should_invert]
|
30
|
+
# mogrify calls it negate...
|
34
31
|
image.negate
|
35
32
|
end
|
36
33
|
for level in [130, 100] # 100 for hulu...
|
37
|
-
|
38
|
-
input.write image.to_blob
|
39
|
-
input.close
|
40
|
-
a = output.read
|
41
|
-
output.close
|
34
|
+
a = `#{GOCR} -l #{level} #{image.path} 2>NUL`
|
42
35
|
a.strip!
|
36
|
+
a = '3' if a == 'S' # sigh
|
43
37
|
if a =~ /[0-9]/
|
44
38
|
a = a.to_i
|
45
39
|
CACHE[memory_bitmap] = a
|
data/spec/ocr.spec.orb
CHANGED
@@ -16,6 +16,9 @@ describe OCR do
|
|
16
16
|
expected_digit = $1.to_i
|
17
17
|
if OCR.identify_digit(File.binread(file), options) != expected_digit
|
18
18
|
p "fail:" + file
|
19
|
+
require 'ruby-debug'
|
20
|
+
debugger
|
21
|
+
OCR.identify_digit(File.binread(file), options)
|
19
22
|
success = false
|
20
23
|
end
|
21
24
|
end
|
@@ -23,6 +26,7 @@ describe OCR do
|
|
23
26
|
end
|
24
27
|
|
25
28
|
it "should be able to grab a colon" do
|
29
|
+
pending "caring about colons"
|
26
30
|
OCR.identify_digit(File.binread("images/colon.bmp"), :might_be_colon => true).should == ":"
|
27
31
|
end
|
28
32
|
|
data/spec/overlayer.spec.rb
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# avoid full loading if testing impossible
|
2
|
+
if RUBY_VERSION < '1.9.2' && RUBY_PLATFORM !~ /java/
|
3
|
+
puts 'not compatible to MRI < 1.9.2'
|
4
|
+
exit 0 # this isn't a real error...
|
5
|
+
end
|
6
|
+
|
1
7
|
require File.expand_path(File.dirname(__FILE__) + '/common')
|
2
8
|
require_relative '../lib/overlayer'
|
3
9
|
|
@@ -128,7 +134,7 @@ describe OverLayer do
|
|
128
134
|
end
|
129
135
|
|
130
136
|
it 'should have key list output on screen' do
|
131
|
-
@o.status.should include("
|
137
|
+
@o.status.should include("r,d,v,q to quit")
|
132
138
|
end
|
133
139
|
|
134
140
|
it 'should accept h for console help'
|
data/spec/screen_tracker.spec.rb
CHANGED
@@ -34,7 +34,7 @@ describe ScreenTracker do
|
|
34
34
|
it "should loop if unable to find the right window" do
|
35
35
|
proc {
|
36
36
|
Timeout::timeout(1) do
|
37
|
-
ScreenTracker.new("
|
37
|
+
ScreenTracker.new("this is supposed to be not running",10,10,20,20)
|
38
38
|
end
|
39
39
|
}.should raise_error(Timeout::Error)
|
40
40
|
end
|
@@ -154,12 +154,10 @@ describe ScreenTracker do
|
|
154
154
|
context "using OCR" do
|
155
155
|
|
156
156
|
before do
|
157
|
-
|
158
|
-
@a = ScreenTracker.new("silence.wav", -111, -16, 86, 13,
|
159
|
-
{:hours => nil, :minute_tens => [-90,7], :minute_ones => [-82, 7], :second_tens => [-72, 7], :second_ones => [-66, 7]} )
|
157
|
+
@a = ScreenTracker.new_from_yaml File.read("../zamples/players/vlc_non_full_screened_and_total_length_under_an_hour.yml"), nil
|
160
158
|
end
|
161
159
|
|
162
|
-
it "should be able to
|
160
|
+
it "should be able to disk dump snapshotted digits" do
|
163
161
|
@a.dump_bmp
|
164
162
|
Pathname.new('minute_tens.bmp').should exist
|
165
163
|
Pathname.new('minute_tens.bmp').size.should be > 0
|
@@ -3,16 +3,17 @@ source: Hulu
|
|
3
3
|
version: 0.4.8
|
4
4
|
mutes:
|
5
5
|
2.0 : 3.0 # comments can go after the # on each line
|
6
|
-
4.0 : 5.0
|
7
|
-
9.0 : 13.0
|
6
|
+
4.0 : 5.0 # mute from second 4 to second 5
|
7
|
+
9.0 : 13.0 # mute from second 9 to second 13
|
8
8
|
44.0 : 50.0 # mute for 6 seconds starting at second 44
|
9
|
-
# This next
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
#
|
14
|
-
# 01:01:01.05 does not work
|
9
|
+
# This next means mute from one minute to one minute one second
|
10
|
+
1:00 : 1:01
|
11
|
+
10:01 : 10:02 # mute from ten minutes, one second to ten minutes, 2 seconds
|
12
|
+
# if you use decimals, you'll have to put them in quotes
|
13
|
+
# 01:01:01.05 (for one hour, one minute, one second and a half) does not work
|
15
14
|
# "01:01:01.05" does
|
15
|
+
"01:01:00.5" : "01:01:01.5" # mute from one hour one minute and a half second to one hour one minute and 1.5s
|
16
|
+
|
16
17
|
blank_outs:
|
17
|
-
"00:15" : "00:18"
|
18
|
-
|
18
|
+
"00:15" : "00:18" # blank from second 15 to 18
|
19
|
+
01:01 : "01:02.0" # blank from one minute one second to one minute two seconds, etc.
|
@@ -1,7 +1,8 @@
|
|
1
1
|
source: "hulu"
|
2
2
|
mutes:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
#
|
3
|
+
# these aren't actually accurate yet, except for Data's one
|
4
|
+
08:55 : 08:56 # what the he...
|
5
|
+
10:50 : 10:51 # durn
|
6
|
+
11:23 : "11:24" # ?
|
7
|
+
"01:15:39.5" : "01:15:41.5" # Data "oh s...."
|
8
|
+
# two onyx at beginning
|